| ||||
#include <stdio.h> #include <string.h> #define u64 unsigned long long char buf[1000001]; unsigned c13[15015]; unsigned c23[7429]; unsigned c31[33263]; unsigned ex[] = { 530714887,20647621,253893397,851703301,1452201241,413778817,611812321,862678081,396271, 437247841,145206361,1419575167,1223941657,1528936501,91433281,32899201,977483449,36307981, 437289029,351058753,1729884511,188985961,25457833,1105779277,631974613,523756711, 1873177693,734166217,96791881,1415969101,796200901,719256497,1058575981,498706651, 200753281,2147022749,7295851,1568471813,706728377,1108135381,37109467,6617929,6868261, 792145729,24214051,1516071547,434042801,178956971,77533123,705351583,100017223, 1272866167,14282143,145348529,638837761,9591661,388695301,1217924159,898343713,1406851249, 36861901,474983881,115873801,1603810561,1511558533,548989561,680972909,464826781, 946787377,160672201,462639409,7759937,73522051,681019921,759266621,20140129,1549308001, 1704682753,732805681,1821792457,201646801,61754941,1150229761,1510870241,252853921, 1381243709,15978007,897087361,2100292841,1204205449,1407548341,976396961,149069989, 224136013,38439523,587861,288099001,1312573123,630888481,1352531269,304080001,207030541, 266811169,373012777,170640961,1534063081,13838569,1336210313,17375249,658831741,1020220661, 420607441,26758057,6334351,848755969,1567830241,317137969,631767943,129461617,35820937, 161498681,897842401,1565893201,615344227,1845128533,899019353,637907581,64377991,1604440111, 47744209,330396701,2072624761,34003061,1223884969,353815801,1348964401,914906539,565707061, 643316461,366652201,841402801,12498061,514738981,557437999,536870911,476011901,903108821,2}; u64 p2[64]; const u64 p32 = ((u64)1)<<32; int main() { //freopen("output.txt", "w", stdout); u64 x_v = 1; p2[0] = 1; for(int i = 1; i != 64; ++i) p2[i] = (x_v<<=1); for(int i = 0; i != 15015; i += 3) c13[i] = true; for(int i = 5; i != 15020;) { c13[i] = true; c13[i+=5] = true; i+=10; } for(int i = 0; i != 15015; i += 7) c13[i] = true; for(int i = 0; i != 15015; i += 11) c13[i] = true; for(int i = 0; i != 15015; i += 13) c13[i] = true; for(int i = 0; i != 7429; i += 17) c23[i] = true; for(int i = 19; i != 7429; i += 19) c23[i] = true; for(int i = 23; i != 7429; i += 23) c23[i] = true; for(int i = 0; i != 33263; i += 29) c31[i] = true; for(int i = 31; i != 33263; i += 31) c31[i] = true; for(int i = 37; i != 33263; i += 37) c31[i] = true; unsigned a = 1; int j = 1; unsigned counter = 0; int r = 1, d = 1234567890%15015; int f = d + 15015 - 0x80000000%15015; buf[1000001]='\0'; for(int i = 0; i != 18; ++i) { memset(buf, '0', 1000000); for(; j != 1000000; ++j) { a += 1234567890; if(a & 0x80000000) { r += f; a &= 0x7FffFFff; }else r += d; if(r >= 15015) r+=-15015; if(c13[r]) continue; if(c23[a%7429]) continue; if(c31[a%33263]) continue; unsigned p = a; unsigned result = p2[(--p)&0x3f]%a; p>>=6; u64 x = p32; x%=a; x<<=32; x%=a; while(p) { if(p&1) result=(x*result)%a; x *= (unsigned)x; x %= a; p>>=1; } if(result != 1) continue; if(a == ex[counter]) { ++counter; continue; } buf[j] = '1'; } printf("%s", buf); j = 0; } return 0; } |
||||
|