// C99 Complementary Multiply With Carry generator // C99 Complementar Multiplicar com o gerador Carry #include <bits/stdc++.h> // CMWC working parts // Peças de trabalho CMWC #define CMWC_CYCLE 4096 // as Marsaglia recommends // como Marsaglia recomenda #define CMWC_C_MAX 809430660 // as Marsaglia recommends // como a Marsaglia recomenda struct cmwc_state{ uint32_t Q[CMWC_CYCLE]; uint32_t c; // must be limited with CMWC_C_MAX // deve ser limitado com CMWC_C_MAX unsigned i; }; // Make 32 bit random number (some systems use 16 bit RAND_MAX [Visual C 2012 uses 15 bits!]) //Cria um número aleatório de 32 bits (alguns sistemas usam RAND_MAX de 16 bits [Visual C 2012 usa 15 bits!]) Uint32_t rand32 ( void ) uint32_t rand32(void){ uint32_t result = rand(); return result << 16 | rand(); } // Init the state with seed // Inicia o estado com semente void initCMWC(struct cmwc_state *state, unsigned int seed){ srand(seed); for (int i = 0; i < CMWC_CYCLE; i++) state->Q[i] = rand32(); do state->c = rand32(); while (state->c >= CMWC_C_MAX); state->i = CMWC_CYCLE - 1; } // CMWC engine // Mecanismo CMWC uint32_t randCMWC(struct cmwc_state *state){ //EDITED parameter *state was missing // O parâmetro EDITED * state estava ausente uint64_t const a = 18782; // as Marsaglia recommends // como Marsaglia recomenda uint32_t const m = 0xfffffffe; // as Marsaglia recommends // como Marsaglia recomenda uint64_t t; uint32_t x; state->i = (state->i + 1) & (CMWC_CYCLE - 1); t = a * state->Q[state->i] + state->c; /* Let c = t / 0xfffffff, x = t mod 0xffffffff */ // Vamos c = t / 0xfffffff, x = t mod 0xffffffff state->c = t >> 32; x = t + state->c; if (x < state->c) { x++; state->c++; } return state->Q[state->i] = m - x; } int main(){ struct cmwc_state cmwc; unsigned int seed = time(NULL); initCMWC(&cmwc, seed); uint32_t num; for(int h=0; h<1000; h++){ num = randCMWC(&cmwc); // printf("Random CMWC: %u\n", (randCMWC(&cmwc)%10)); printf("%u %u\n",(num),(num%10)); } }
Standard input is empty
2217110080 0 2520846656 6 1964459258 8 3510855718 8 4035612778 8 1100063343 3 4119436569 9 4158892301 1 3181678953 3 314117423 3 1077520829 9 595344359 9 2475331563 3 1782450116 6 1692154888 8 1277666184 4 3745027082 2 3457354053 3 1961154949 9 1035750786 6 1814248972 2 3570707310 0 3842399984 4 964997894 4 1182161462 2 3667844309 9 2963742481 1 988413774 4 123195184 4 78039239 9 2131681311 1 408812052 2 4172157346 6 4072281031 1 101886883 3 3413812271 1 3584599804 4 2132526482 2 3352291336 6 1227268659 9 1685649198 8 4238397598 8 73988460 0 2497127935 5 1933851679 9 3269183175 5 3208707266 6 2465677617 7 2726187491 1 4028537464 4 2680070156 6 1632122459 9 2297129904 4 3637708523 3 2900446327 7 1655732746 6 1200112590 0 3983927212 2 2425433003 3 4060558403 3 811436879 9 2705391338 8 1236005641 1 689072435 5 678602064 4 1362642249 9 3965392478 8 451989940 0 3128519207 7 3466769162 2 2681907001 1 1164461370 0 2122003392 2 1377909971 1 894681756 6 902216576 6 1189803054 4 3049825094 4 3688125818 8 1631436511 1 1489007653 3 1531997854 4 1039112406 6 2958851920 0 3042835303 3 1092375146 6 350165632 2 4046240540 0 343103979 9 3748894918 8 1604828453 3 3844957326 6 2535236236 6 3762675795 5 3247021294 4 1519434093 3 4239853911 1 1204187920 0 1002764373 3 1049629626 6 381609508 8 2237411110 0 1477541024 4 552431795 5 102892352 2 1274344329 9 2354865078 8 3327037134 4 3654849262 2 113940306 6 3322345746 6 864649980 0 3773519357 7 4272222693 3 4196618251 1 1297767686 6 2305564056 6 1419868276 6 4026443120 0 2341432819 9 479916638 8 1540158017 7 3402706919 9 1916857331 1 3400588128 8 559236148 8 4290253822 2 2659506417 7 2997292720 0 3830117738 8 3591759152 2 3094209246 6 761451730 0 3856939214 4 2211873769 9 3912169824 4 3661429724 4 1195732586 6 2572057169 9 397211829 9 3572956630 0 1457153138 8 3936333514 4 2619172525 5 3889255309 9 2552387455 5 771129852 2 2148263241 1 2385118239 9 2866933832 2 3270335906 6 473135895 5 3238809704 4 1696284820 0 2763527650 0 2855322011 1 1705346654 4 1216555222 2 1367123723 3 2317692737 7 3425974173 3 767741638 8 3275004715 5 2457024477 7 54813949 9 3448822169 9 558069690 0 465622332 2 1534975248 8 501140410 0 3159320916 6 492055200 0 616285292 2 885061350 0 2960170561 1 3214282584 4 3276171708 8 831669816 6 2506391361 1 942465685 5 2808052032 2 1509211166 6 1482721655 5 2881843239 9 976151219 9 1957531540 0 1779743974 4 2405172871 1 4173482263 3 211675032 2 30912153 3 292735499 9 118074878 8 457318121 1 1204275569 9 3406264750 0 2591661790 0 1540184323 3 1794707286 6 693210406 6 3205861037 7 2956143260 0 1286885624 4 3049661804 4 1645905524 4 1232623911 1 1668631268 8 2433317214 4 2396619796 6 2895652405 5 2959969426 6 3329074211 1 3037128596 6 292175179 9 2603783586 6 1252349281 1 4204285882 2 1170194974 4 2189413428 8 2659418351 1 385964752 2 1418603843 3 1119096790 0 4501395 5 377764287 7 2737021693 3 4144326883 3 3135381660 0 3648731480 0 242699732 2 2459746712 2 3981764974 4 3002814510 0 2259800449 9 387298831 1 591478085 5 3933907276 6 1788395008 8 352694507 7 2921131565 5 2124512470 0 1626005295 5 3959620104 4 790215335 5 801749862 2 2444282945 5 4162747892 2 576862521 1 3032456015 5 2275714969 9 307038477 7 4120466857 7 404999957 7 660014127 7 2410178604 4 3267654443 3 545779978 8 445867533 3 1521028451 1 476708568 8 2290319628 8 4015283715 5 2242245113 3 1117060827 7 1890441725 5 4150503534 4 2115369726 6 1693280188 8 1978407497 7 2636796136 6 1183032811 1 1005666629 9 2266450478 8 2660199852 2 3501518744 4 2607563010 0 3465382726 6 4271461123 3 520226508 8 2007723193 3 2928328508 8 2376862659 9 3920423965 5 4280783866 6 3806626844 4 746078196 6 3998095221 1 2938141687 7 545091318 8 2769091591 1 2890434319 9 1240838460 0 2981004342 2 883568742 2 743186485 5 752441291 1 1353793188 8 744393669 9 2106680856 6 1917314923 3 1192428602 2 1616033423 3 2154750417 7 112428060 0 829680061 1 1485930120 0 2895038357 7 1197165859 9 2976558901 1 826308108 8 205226361 1 2504043906 6 2050885672 2 3218309011 1 1354647340 0 1109370849 9 1368289965 5 1931417167 7 1090407829 9 1928731340 0 2114993082 2 1401030398 8 1854389257 7 354217765 5 2223991913 3 1975818762 2 1978957152 2 3001450237 7 1853295535 5 1474167793 3 917117226 6 1983861997 7 1160830461 1 1978182286 6 1519802025 5 1836882728 8 1526529528 8 2720414240 0 3263054583 3 2859306970 0 4113281426 6 1178298552 2 1826084019 9 2104333408 8 291799564 4 1783019793 3 413928133 3 1663696567 7 2144027600 0 4115575041 1 2804932399 9 3589950961 1 2057953270 0 448259285 5 1327678237 7 2936313476 6 1617330243 3 875009492 2 2211097042 2 1729641574 4 1576368911 1 1012053616 6 330426745 5 627240859 9 1538901267 7 4040493188 8 1694161586 6 2909470224 4 3844531785 5 2370022058 8 846438126 6 887566797 7 2268812688 8 3357355750 0 3417216427 7 2442893667 7 2808838947 7 65687610 0 3334702791 1 753194047 7 4110638918 8 2627449940 0 216156482 2 116791964 4 97314510 0 1914941274 4 2058166838 8 2805424206 6 2143604806 6 3055912854 4 4189802216 6 3317987224 4 4215559618 8 1164750754 4 562326055 5 3493354836 6 3882804665 5 1990910132 2 3096147187 7 1203180190 0 4068318143 3 2433195168 8 2251344970 0 674012164 4 1146291572 2 1972874317 7 2004350096 6 2173170052 2 1072282198 8 2505427677 7 153847173 3 3965643715 5 1178915222 2 1529736725 5 988008075 5 1497247820 0 41990453 3 3377417369 9 3668580982 2 2960653071 1 2416732081 1 177766733 3 267174616 6 3137855174 4 3692944922 2 865836438 8 321679197 7 4270089196 6 200357588 8 1425726368 8 2515559269 9 3387391082 2 3342569149 9 4042353650 0 306158564 4 354421157 7 4099420376 6 713789123 3 1486880783 3 3205271897 7 2012751726 6 3926648729 9 757298499 9 4231854452 2 1112273508 8 3540744976 6 1193792082 2 1822191536 6 1293724734 4 2123903819 9 855265245 5 2874902066 6 2822366095 5 2153659315 5 1798528626 6 818166179 9 3050264265 5 3315390912 2 2419724341 1 156064403 3 37023765 5 4147856837 7 4259069357 7 336261265 5 2295619068 8 663366722 2 159398380 0 2486557217 7 740801504 4 1818685053 3 944967640 0 3311890980 0 636508776 6 726432725 5 602120446 6 811809909 9 3842418481 1 1183805739 9 3558659418 8 897636357 7 2529604839 9 647537926 6 762048226 6 2119723478 8 3399713767 7 1138088347 7 2833984616 6 3482183774 4 572825811 1 3370690907 7 1575037274 4 4013521465 5 136927892 2 2054542216 6 588561137 7 1901206500 0 9610444 4 2828099203 3 256784657 7 131142307 7 1906670908 8 3092056784 4 777292037 7 2078094003 3 437849268 8 21114381 1 4042677029 9 2308903070 0 1931582438 8 1308537521 1 1126583367 7 1978274786 6 3837173050 0 1469759247 7 906230083 3 371527407 7 1511314942 2 1412482233 3 1823227723 3 850228350 0 1455984936 6 2966715914 4 2142234817 7 3666992893 3 2471708692 2 4224751271 1 3069044927 7 1589212645 5 4160262997 7 3944075837 7 2134669188 8 3826937088 8 3823763103 3 3704471062 2 1549811655 5 2428006386 6 1699328128 8 2707092188 8 2460970812 2 1019760840 0 1178617501 1 1403588147 7 1437572759 9 61152544 4 2484411625 5 4222456785 5 3984500731 1 163563342 2 1536836672 2 2479083323 3 824566030 0 1372737885 5 4096022099 9 756700506 6 3143032345 5 1266627822 2 3269452272 2 421551502 2 3026799240 0 1035759525 5 3019185875 5 3033354679 9 1519446042 2 445203628 8 1179490702 2 1778785778 8 175394472 2 707522185 5 2868665326 6 3457664096 6 2999195928 8 3509806687 7 2047306406 6 3676989997 7 4080814754 4 2381733619 9 3749841634 4 1887967946 6 502246116 6 4152395475 5 1283530464 4 1583457358 8 1383868800 0 1496152897 7 2451903281 1 1554288129 9 1850064838 8 2023983467 7 361812513 3 1622625812 2 4025847457 7 650830384 4 408845821 1 1336366276 6 2736204109 9 4183819662 2 2505293950 0 1682087870 0 2769165859 9 1435706418 8 2321903875 5 232062828 8 170548511 1 187022912 2 2699508082 2 1766211213 3 2497434657 7 4241080363 3 2499996674 4 3873652066 6 3340389685 5 131536973 3 701880652 2 2594347648 8 2118668710 0 238041574 4 370826859 9 4032427476 6 3307375362 2 242901663 3 3289124695 5 3243893393 3 2675770037 7 2185708306 6 1450955151 1 1187557088 8 3611983101 1 1206963549 9 2108053280 0 1870221944 4 2939580385 5 4178545179 9 2565562142 2 2366749869 9 423906348 8 1084404668 8 704108192 2 1977442201 1 1307655157 7 1437851107 7 3166162884 4 3655856960 0 2171704090 0 1802081501 1 3490541143 3 2556649737 7 2348511294 4 4105518504 4 3658441334 4 497797667 7 1993899338 8 3960269998 8 2362449803 3 961838300 0 468683098 8 1748299595 5 3453471364 4 1656140945 5 4187386907 7 295937564 4 764697807 7 1893004934 4 1482096039 9 4046444411 1 582793458 8 76351679 9 4175498149 9 2315949259 9 3124043030 0 911802324 4 4112650377 7 2572219696 6 3180336704 4 403045750 0 523826569 9 2582211855 5 767421291 1 4073459880 0 349779829 9 1909828524 4 3185581120 0 1289340640 0 4111170503 3 2499600442 2 127173984 4 2825553779 9 3477812908 8 725570082 2 1506004453 3 737029073 3 1809311410 0 471934405 5 2792548195 5 2034322051 1 2131345725 5 2275089379 9 1792729465 5 3627392154 4 4080164333 3 1255784844 4 3093666007 7 3005077425 5 3013750496 6 747785290 0 3550701677 7 1409296761 1 542192927 7 1645107811 1 3406541044 4 251335208 8 1210938317 7 1173874092 2 2706796566 6 3385287497 7 4166290900 0 1683492867 7 3889843325 5 3421743193 3 3872035471 1 2457075006 6 707626183 3 2940497576 6 2585176343 3 2539396307 7 3029673643 3 56933381 1 486208118 8 2224271059 9 159553373 3 2417401835 5 1589582407 7 1649150041 1 3699243095 5 3009876410 0 2133501714 4 2856253461 1 405262954 4 1142958266 6 2622199194 4 3098424161 1 1354814339 9 3904893918 8 2690241718 8 1260636640 0 3463178389 9 4276146849 9 779658266 6 3851256531 1 2467018411 1 608787877 7 1099397990 0 2669767419 9 3630772287 7 619137992 2 1844798446 6 3021078511 1 466150571 1 2266810978 8 523697724 4 519339186 6 2655786859 9 4147573825 5 3410853977 7 3321486578 8 4000365484 4 3930074065 5 1742267670 0 2587429292 2 329273201 1 2286792346 6 1302755676 6 1008228796 6 1759137387 7 1001836318 8 1770961214 4 1208297460 0 1897521833 3 2535515616 6 2445209021 1 1245935095 5 3954006404 4 4259920500 0 2171199918 8 923464931 1 3923071397 7 3189658654 4 239255297 7 4254684985 5 377406364 4 2211127278 8 1576832414 4 2742287853 3 2943046598 8 883836796 6 1381392878 8 458593539 9 263201975 5 1445491701 1 3179934542 2 631946028 8 5416306 6 2643697801 1 2031031572 2 4136176632 2 2674419200 0 2317286408 8 417735209 9 1061052118 8 194304072 2 1895229283 3 4284187410 0 1524193361 1 3626228637 7 1597780217 7 1432750520 0 3529875314 4 1024422008 8 3226554871 1 3749025148 8 3974225813 3 2613028516 6 1499716983 3 1478405126 6 1881107204 4 1805480526 6 3436523338 8 1750548664 4 61945449 9 873955557 7 1670354706 6 2625739312 2 3502253826 6 3425569363 3 3663369900 0 3284570080 0 1096448178 8 2463124784 4 2130079272 2 4290050991 1 3091665824 4 1944929461 1 2278085377 7 3681174009 9 3324030006 6 665505834 4 2949309103 3 2093783988 8 1303256376 6 2189985453 3 3921355710 0 963914330 0 3718363357 7 14199824 4 2711111571 1 3284093890 0 1196406530 0 2484925662 2 2032823216 6 1576764217 7 2139340177 7 2591969000 0 281987195 5 184770334 4 175400643 3 2334304452 2 3783898964 4 2604387394 4 1267334697 7 155642759 9 3119211074 4 2267840716 6 2399634111 1 1610097125 5 2744817852 2 654693748 8 2530767628 8 747746129 9 3880136505 5 464742285 5 3056602026 6 1236610776 6 1758441511 1 2620541075 5 3595991765 5 1164349316 6 2811220374 4 1525656377 7 3347256297 7 2950869648 8 109469941 1 419892011 1 730676408 8 639702906 6 1810406445 5 661061743 3 1087722397 7 3796308415 5 4260645693 3 1299133033 3 1549057604 4 939761199 9 1700125502 2 1069595127 7 3045985093 3 4002246634 4 3799537815 5 1222393198 8 4090368149 9 4106270923 3 3705988203 3 2543592748 8 1421922663 3 3444294533 3 3966955131 1 3270563187 7 610791016 6 3080240930 0 924462483 3 1042483127 7 3313063289 9 3357783997 7 4199791401 1 2958861694 4 40010864 4 151470812 2 3871814056 6 2361679959 9 3041490801 1 564260724 4 1083322242 2 3832190599 9 2796657587 7 2909392139 9 2329503995 5 1723671354 4 1150953109 9 1249213394 4 2924585212 2 3848708345 5 3567272606 6 1847629572 2 2214608855 5 4283458103 3 1402598748 8 1018597410 0 458625756 6 3430091023 3 1204106903 3 2954638209 9 4177175151 1 3513812953 3 1252625617 7 3615317718 8 1358336643 3 2797731694 4 207140260 0 442178953 3 3174080698 8 3326941890 0 2998854737 7 2702941424 4 3771718663 3 3117384680 0 1849321814 4 1885651112 2 3044280024 4 2591986759 9 3639832242 2 4068689596 6 3901017767 7 2379563751 1 1334506185 5 3261563363 3 2028788828 8 3598928939 9 3011869885 5 3073195674 4 220094966 6 3495913218 8 4187166873 3 2016192521 1 2278664724 4 1605071270 0 3731127207 7 2004885239 9 1575422429 9 1272821587 7 1440535971 1 3469396648 8 2545725504 4 3398324180 0 2100149057 7 35420457 7 298880995 5 1453293292 2 4137495393 3 1059570115 5 4076876449 9 1738090872 2 3582147298 8