よくある素数列挙サンプルコード集
t0001.c
愚直に素数を列挙する。
範囲
[2, INT_MAX)
#include <stdio.h> #include <limits.h> int main() { int c; int d; for(c = 2; c < INT_MAX; c++) { for(d = 2; d < c; d++) if(c % d == 0) goto next; printf("%d\n", c); next:; } }
t0002.c
愚直に素数を列挙する。その2 (t0001.c + 効率化)
範囲
[2, INT_MAX)
#include <stdio.h> #include <limits.h> #include <math.h> int main() { int c; int d; int s; printf("2\n"); for(c = 3; c < INT_MAX; c += 2) { s = (int)sqrt(c); for(d = 3; d <= s; d += 2) if(c % d == 0) goto next; printf("%d\n", c); next:; } }
t0003.c
エラトステネスの篩を愚直に実装
範囲
[2, 1.0E+8)
#include <stdio.h> #include <malloc.h> #define N 100000000 // 10^8 int main() { char *t = (char *)malloc(N); int c; int d; if(!t) return; // fatal memset(t, 0x00, N); for(c = 2; c < N; c++) { if(!t[c]) { printf("%d\n", c); if (c < N / c) { for(d = c * c; d < N; d += c) { t[d] = 1; } } } } free(t); }
t0004.c
エラトステネスの篩_その2 (t0003.c + 効率化?)
範囲
[2, 3.0E+10)
#include <stdio.h> #include <malloc.h> #define N 1875000000 // 3.0E+10 / 16 // #define N 187500000 // #define N 18750000 #define N_P13 15015 int main() { unsigned char *t = (unsigned char *)malloc(N); // 8-bit uint array unsigned __int64 c; unsigned __int64 d; unsigned int i; // 32-bit uint if(!t) return; // fatal memset(t, 0x00, N_P13); printf("2\n"); for(c = 3; c <= 13; c += 2) { if(c != 9) { printf("%I64u\n", c); for(d = c; d / 16 < N_P13; d += c * 2) { t[d / 16] |= 1 << d / 2 % 8; } } } for(i = N_P13; i + N_P13 <= N; i += N_P13) { memcpy(t + i, t, N_P13); } for(; i < N; i++) { t[i] = t[i - N_P13]; } for(c = 17; c / 16 < N; c += 2) { if(!(t[c / 16] & (1 << c / 2 % 8))) { printf("%I64u\n", c); if(c < 0x100000000) // If c < 2^32 { for(d = c * c; d / 16 < N; d += c * 2) { t[d / 16] |= 1 << d / 2 % 8; } } } } free(t); }
t0005.c
ミラー・ラビン素数判定法で列挙する。
範囲
[2, UINT_MAX)
#include <stdio.h> #include <stdlib.h> #include <limits.h> #define K 20 // #define K 30 // #define K 40 // #define K 50 typedef unsigned __int32 uint; typedef unsigned __int64 uint64; #if 1 // VC ----> #include <windows.h> #include <wincrypt.h> #pragma comment(lib, "ADVAPI32") static uint GetRandom(uint minval, uint maxval) { uint64 v; { HCRYPTPROV hp; if(!CryptAcquireContext(&hp, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) exit(1); // fatal if(!CryptGenRandom(hp, sizeof(v), (BYTE *)&v)) exit(1); // fatal CryptReleaseContext(hp, 0); } return v % (maxval - minval + 1) + minval; } // <---- VC #elif 0 static uint GetRandom(uint minval, uint maxval) { uint64 v = rand(); v ^= (uint64)rand() << 15; v ^= (uint64)rand() << 30; v ^= (uint64)rand() << 45; v ^= (uint64)rand() << 60; return v % (maxval - minval + 1) + minval; } #else static uint Xorshift128(void) { static uint x = 1; static uint y; static uint z; static uint a; uint t; t = x; t ^= x << 11; t ^= t >> 8; t ^= a; t ^= a >> 19; x = y; y = z; z = a; a = t; return t; } static uint GetRandom(uint minval, uint maxval) { uint64 v = Xorshift128() | (uint64)Xorshift128() << 32; return v % (maxval - minval + 1) + minval; } #endif static uint ModPow(uint b, uint e, uint m) { uint64 a = 1; for(; e; e >>= 1) { if(e & 1) a = (a * b) % m; b = ((uint64)b * b) % m; } return a; } static int IsPrime(uint n) { uint d; uint x; uint r; uint s; uint t; if(n <= 1) return 0; if(n <= 3) return 1; if(!(n & 1)) return 0; d = n; for(r = 0; !((d >>= 1) & 1); r++); for(t = K; t; t--) { x = ModPow(GetRandom(2, n - 2), d, n); if(x != 1 && x != n - 1) { for(s = r; ; s--) { if(!s) return 0; x = ModPow(x, 2, n); if(x == n - 1) break; } } } return 1; } int main() { uint c; for(c = 0; c < UINT_MAX; c++) if(IsPrime(c)) printf("%u\n", c); }
t0005B.c
ミラー・ラビン素数判定法で列挙する。その2
もし n < 4,759,123,141 なら、a = 2, 7, 61 について調べればよい。@ Wikipedia
らしいので 2, 7, 61 のみ検査する。
範囲
[2, UINT_MAX)
#include <stdio.h> #include <stdlib.h> #include <limits.h> typedef unsigned __int32 uint; typedef unsigned __int64 uint64; static uint ModPow(uint b, uint e, uint m) { uint64 a = 1; for(; e; e >>= 1) { if(e & 1) a = (a * b) % m; b = ((uint64)b * b) % m; } return a; } static int IsPrime(uint n) { static uint a[] = { 2, 7, 61 }; uint d; uint x; uint r; uint s; uint t; // n が a[] の範囲内の場合は表から返す。 if(n <= 61) return "00110101000101000101000100000101000001000101000100000100000101"[n] & 1; if(!(n & 1)) return 0; d = n; for(r = 0; !((d >>= 1) & 1); r++); for(t = 0; t < 3; t++) { x = ModPow(a[t], d, n); if(x != 1 && x != n - 1) { for(s = r; ; s--) { if(!s) return 0; x = ModPow(x, 2, n); if(x == n - 1) break; } } } return 1; } int main() { uint c; for(c = 0; c < UINT_MAX; c++) if(IsPrime(c)) printf("%u\n", c); }
t0006.c
ディープラーニング
学習済みの多層パーセプトロンを使用する。
ここで作ったものを使用
ソースはこのへん
- ML構成
- 入力層 : 10
- 隠れ層 : 11, 11, 11
- 出力層 : 1
- 入力 : 0 ~ 1023 を2進数にしてそれぞれのビットを 0.0, 1.0 として入力
- 出力 : 素数であれば 1.0 そうでなければ 0.0
- 学習回数 : 183000000
範囲
[0, 1023]
#include <stdio.h> #include <math.h> #define E 2.71828182845905 static double Sigmoid(double v) { return 1.0 / (1.0 + pow(E, -v)); } static double IsPrime_ML(double n0[10]) { const double nBias = 1.0; double n1[11] = { 0 }; double n2[11] = { 0 }; double n3[11] = { 0 }; double n4[1] = { 0 }; n1[0] += n0[0] * -7.553637898946560000000000000000; n1[0] += n0[1] * +0.867188003110317000000000000000; n1[0] += n0[2] * +7.492663780956170000000000000000; n1[0] += n0[3] * +3.013894546179830000000000000000; n1[0] += n0[4] * +9.689626036169700000000000000000; n1[0] += n0[5] * -2.352568318036370000000000000000; n1[0] += n0[6] * +4.004548633254600000000000000000; n1[0] += n0[7] * +3.525873672538360000000000000000; n1[0] += n0[8] * -5.218867048911260000000000000000; n1[0] += n0[9] * +1.531265910355660000000000000000; n1[0] += nBias * -5.056147841702360000000000000000; n1[1] += n0[0] * +1.527818790627290000000000000000; n1[1] += n0[1] * -3.052841329529100000000000000000; n1[1] += n0[2] * -5.374356854993570000000000000000; n1[1] += n0[3] * +1.531663087548050000000000000000; n1[1] += n0[4] * +3.334251729690790000000000000000; n1[1] += n0[5] * -0.343246117682032000000000000000; n1[1] += n0[6] * -5.161694245508010000000000000000; n1[1] += n0[7] * +2.407108584581980000000000000000; n1[1] += n0[8] * -1.340932482101350000000000000000; n1[1] += n0[9] * -0.646639756526057000000000000000; n1[1] += nBias * +1.693784549486520000000000000000; n1[2] += n0[0] * +2.860811071930800000000000000000; n1[2] += n0[1] * -9.593563899695910000000000000000; n1[2] += n0[2] * +7.512308790965670000000000000000; n1[2] += n0[3] * -8.988060173629470000000000000000; n1[2] += n0[4] * +7.271322887094670000000000000000; n1[2] += n0[5] * -7.468546286733300000000000000000; n1[2] += n0[6] * -13.316288565904500000000000000000; n1[2] += n0[7] * -7.007138665818430000000000000000; n1[2] += n0[8] * +7.065881666372570000000000000000; n1[2] += n0[9] * -10.748191577950800000000000000000; n1[2] += nBias * +11.787985887162900000000000000000; n1[3] += n0[0] * +1.174884424566180000000000000000; n1[3] += n0[1] * -3.809833838653910000000000000000; n1[3] += n0[2] * +4.304471856247140000000000000000; n1[3] += n0[3] * -9.756944609812100000000000000000; n1[3] += n0[4] * -8.006480301458300000000000000000; n1[3] += n0[5] * +5.939199805450500000000000000000; n1[3] += n0[6] * +4.389695880191760000000000000000; n1[3] += n0[7] * +3.684747372071740000000000000000; n1[3] += n0[8] * +5.612521913838800000000000000000; n1[3] += n0[9] * +2.996230358545130000000000000000; n1[3] += nBias * +3.232847403588960000000000000000; n1[4] += n0[0] * +10.536984940566800000000000000000; n1[4] += n0[1] * -7.444347950298820000000000000000; n1[4] += n0[2] * +7.335262221314660000000000000000; n1[4] += n0[3] * -6.167747339475520000000000000000; n1[4] += n0[4] * +5.444639515015150000000000000000; n1[4] += n0[5] * -7.015422860913620000000000000000; n1[4] += n0[6] * +2.480183231425260000000000000000; n1[4] += n0[7] * -4.535796336479430000000000000000; n1[4] += n0[8] * +6.247279921914570000000000000000; n1[4] += n0[9] * -5.284799357120940000000000000000; n1[4] += nBias * -7.524605077261150000000000000000; n1[5] += n0[0] * +3.356220911357580000000000000000; n1[5] += n0[1] * -7.670751157441330000000000000000; n1[5] += n0[2] * -10.696083721438200000000000000000; n1[5] += n0[3] * +5.636332318143230000000000000000; n1[5] += n0[4] * -6.504930579453510000000000000000; n1[5] += n0[5] * -2.901902973523700000000000000000; n1[5] += n0[6] * -9.760397876454680000000000000000; n1[5] += n0[7] * +4.083623466626810000000000000000; n1[5] += n0[8] * +4.686449796492920000000000000000; n1[5] += n0[9] * -5.930327295007160000000000000000; n1[5] += nBias * +8.676349976661170000000000000000; n1[6] += n0[0] * -3.415105384353140000000000000000; n1[6] += n0[1] * -5.061915423317550000000000000000; n1[6] += n0[2] * -1.609297036128620000000000000000; n1[6] += n0[3] * +7.312149143982590000000000000000; n1[6] += n0[4] * +1.933909390757280000000000000000; n1[6] += n0[5] * -4.217118860166000000000000000000; n1[6] += n0[6] * +0.355265739522553000000000000000; n1[6] += n0[7] * -3.883731309634520000000000000000; n1[6] += n0[8] * +5.426251913070200000000000000000; n1[6] += n0[9] * +5.866108329704650000000000000000; n1[6] += nBias * +3.786262916495860000000000000000; n1[7] += n0[0] * +0.367939147515263000000000000000; n1[7] += n0[1] * -3.729244841410990000000000000000; n1[7] += n0[2] * +1.085344431007810000000000000000; n1[7] += n0[3] * +2.067751874382750000000000000000; n1[7] += n0[4] * +1.137026439170030000000000000000; n1[7] += n0[5] * +2.910905853314580000000000000000; n1[7] += n0[6] * -10.728308070023400000000000000000; n1[7] += n0[7] * +0.159020979674387000000000000000; n1[7] += n0[8] * +2.674139044339010000000000000000; n1[7] += n0[9] * -2.764431201866620000000000000000; n1[7] += nBias * -3.926477191788660000000000000000; n1[8] += n0[0] * +7.479855326700810000000000000000; n1[8] += n0[1] * -7.782130614134660000000000000000; n1[8] += n0[2] * +6.332251452990560000000000000000; n1[8] += n0[3] * -6.135531925564550000000000000000; n1[8] += n0[4] * -5.084370854374390000000000000000; n1[8] += n0[5] * -6.850824841516470000000000000000; n1[8] += n0[6] * -0.924851549158688000000000000000; n1[8] += n0[7] * -4.581519394546680000000000000000; n1[8] += n0[8] * -6.589000572237930000000000000000; n1[8] += n0[9] * -5.502589059015840000000000000000; n1[8] += nBias * +3.960015258916520000000000000000; n1[9] += n0[0] * +3.515087987961960000000000000000; n1[9] += n0[1] * -8.752159589335810000000000000000; n1[9] += n0[2] * -5.465344137671690000000000000000; n1[9] += n0[3] * -0.641341339606336000000000000000; n1[9] += n0[4] * +0.618460347826767000000000000000; n1[9] += n0[5] * -2.512821099256980000000000000000; n1[9] += n0[6] * +6.253022474516070000000000000000; n1[9] += n0[7] * -1.418543901266920000000000000000; n1[9] += n0[8] * -2.494778275896800000000000000000; n1[9] += n0[9] * -6.632819820483990000000000000000; n1[9] += nBias * +8.306232720903210000000000000000; n1[10] += n0[0] * +13.942005324327100000000000000000; n1[10] += n0[1] * -5.780818581034340000000000000000; n1[10] += n0[2] * -1.558263784087750000000000000000; n1[10] += n0[3] * +2.711996757102990000000000000000; n1[10] += n0[4] * +3.969474046436840000000000000000; n1[10] += n0[5] * +0.696652777033719000000000000000; n1[10] += n0[6] * -0.519901313955434000000000000000; n1[10] += n0[7] * +2.274151726418530000000000000000; n1[10] += n0[8] * -1.651990294664210000000000000000; n1[10] += n0[9] * -2.281284574703110000000000000000; n1[10] += nBias * -7.446998444331730000000000000000; n1[0] = Sigmoid(n1[0]); n1[1] = Sigmoid(n1[1]); n1[2] = Sigmoid(n1[2]); n1[3] = Sigmoid(n1[3]); n1[4] = Sigmoid(n1[4]); n1[5] = Sigmoid(n1[5]); n1[6] = Sigmoid(n1[6]); n1[7] = Sigmoid(n1[7]); n1[8] = Sigmoid(n1[8]); n1[9] = Sigmoid(n1[9]); n1[10] = Sigmoid(n1[10]); n2[0] += n1[0] * +5.768231513001010000000000000000; n2[0] += n1[1] * -2.843048454912660000000000000000; n2[0] += n1[2] * +6.345649558600110000000000000000; n2[0] += n1[3] * +7.164664646186290000000000000000; n2[0] += n1[4] * -6.090960949130610000000000000000; n2[0] += n1[5] * +6.735523356634270000000000000000; n2[0] += n1[6] * +4.090676303800960000000000000000; n2[0] += n1[7] * -1.832065603538630000000000000000; n2[0] += n1[8] * -6.302180832600370000000000000000; n2[0] += n1[9] * +6.011555621717560000000000000000; n2[0] += n1[10] * -13.972108211227200000000000000000; n2[0] += nBias * -3.695064544379680000000000000000; n2[1] += n1[0] * +12.476754101767200000000000000000; n2[1] += n1[1] * +8.609427500651630000000000000000; n2[1] += n1[2] * +9.278669090775200000000000000000; n2[1] += n1[3] * +11.366589160652800000000000000000; n2[1] += n1[4] * -17.260885625143200000000000000000; n2[1] += n1[5] * +5.255048342995560000000000000000; n2[1] += n1[6] * -2.109352273510620000000000000000; n2[1] += n1[7] * -7.697029048281190000000000000000; n2[1] += n1[8] * -2.683682092767110000000000000000; n2[1] += n1[9] * -1.708352316765080000000000000000; n2[1] += n1[10] * -7.670588491009360000000000000000; n2[1] += nBias * -3.538692583581950000000000000000; n2[2] += n1[0] * +3.809663108298770000000000000000; n2[2] += n1[1] * -2.867837746375580000000000000000; n2[2] += n1[2] * +2.207960285615560000000000000000; n2[2] += n1[3] * +1.873134652228680000000000000000; n2[2] += n1[4] * -2.601598390083490000000000000000; n2[2] += n1[5] * +14.610391820297200000000000000000; n2[2] += n1[6] * -9.447365541093710000000000000000; n2[2] += n1[7] * -2.577139128644240000000000000000; n2[2] += n1[8] * -4.328068557518430000000000000000; n2[2] += n1[9] * -5.460734970935260000000000000000; n2[2] += n1[10] * +3.911985473183600000000000000000; n2[2] += nBias * -5.562689942196550000000000000000; n2[3] += n1[0] * -4.390228951171570000000000000000; n2[3] += n1[1] * +5.676675304629900000000000000000; n2[3] += n1[2] * -11.348626170790200000000000000000; n2[3] += n1[3] * -4.821513807246120000000000000000; n2[3] += n1[4] * +4.824833697328650000000000000000; n2[3] += n1[5] * +1.953554430356800000000000000000; n2[3] += n1[6] * -11.723331425673700000000000000000; n2[3] += n1[7] * +13.298212491534100000000000000000; n2[3] += n1[8] * +11.687184737507100000000000000000; n2[3] += n1[9] * -6.948576296807460000000000000000; n2[3] += n1[10] * +6.696440507201850000000000000000; n2[3] += nBias * +2.497303341721310000000000000000; n2[4] += n1[0] * -4.505876739506260000000000000000; n2[4] += n1[1] * -0.723067835970488000000000000000; n2[4] += n1[2] * -5.936614421202700000000000000000; n2[4] += n1[3] * -0.144092507165855000000000000000; n2[4] += n1[4] * +4.576252232203330000000000000000; n2[4] += n1[5] * -3.214103259516310000000000000000; n2[4] += n1[6] * +0.069287538014120800000000000000; n2[4] += n1[7] * +1.678267077755650000000000000000; n2[4] += n1[8] * +3.523533929108710000000000000000; n2[4] += n1[9] * -3.588992983093220000000000000000; n2[4] += n1[10] * +13.203478992967500000000000000000; n2[4] += nBias * -1.868332975156400000000000000000; n2[5] += n1[0] * -0.550691824693857000000000000000; n2[5] += n1[1] * +0.209060444464180000000000000000; n2[5] += n1[2] * +4.269833876048860000000000000000; n2[5] += n1[3] * +3.062722130102580000000000000000; n2[5] += n1[4] * +6.100250728407000000000000000000; n2[5] += n1[5] * +4.325906520244910000000000000000; n2[5] += n1[6] * +0.685902045086921000000000000000; n2[5] += n1[7] * -4.398239959378080000000000000000; n2[5] += n1[8] * +0.056315573589771900000000000000; n2[5] += n1[9] * +7.126045143015800000000000000000; n2[5] += n1[10] * -7.496224491263110000000000000000; n2[5] += nBias * -0.134354643406885000000000000000; n2[6] += n1[0] * +6.731125120932140000000000000000; n2[6] += n1[1] * +3.522827564606600000000000000000; n2[6] += n1[2] * +10.733145350197800000000000000000; n2[6] += n1[3] * -2.934665446047860000000000000000; n2[6] += n1[4] * -5.052317032610910000000000000000; n2[6] += n1[5] * +5.098385794877650000000000000000; n2[6] += n1[6] * +7.403150624698770000000000000000; n2[6] += n1[7] * -4.418448809549030000000000000000; n2[6] += n1[8] * -10.551616666716200000000000000000; n2[6] += n1[9] * +4.185491217692520000000000000000; n2[6] += n1[10] * -6.693560473510570000000000000000; n2[6] += nBias * -7.478989918280430000000000000000; n2[7] += n1[0] * -2.466983889021000000000000000000; n2[7] += n1[1] * +3.245006412290940000000000000000; n2[7] += n1[2] * -3.903572426239420000000000000000; n2[7] += n1[3] * -5.036867384401360000000000000000; n2[7] += n1[4] * +0.853244341011590000000000000000; n2[7] += n1[5] * -4.721012254846750000000000000000; n2[7] += n1[6] * -3.438904301576000000000000000000; n2[7] += n1[7] * +0.120909587673506000000000000000; n2[7] += n1[8] * +3.722368939955080000000000000000; n2[7] += n1[9] * -11.352223837626700000000000000000; n2[7] += n1[10] * +7.311858715578040000000000000000; n2[7] += nBias * +10.179113509156900000000000000000; n2[8] += n1[0] * +0.231554968310312000000000000000; n2[8] += n1[1] * -15.299116022657500000000000000000; n2[8] += n1[2] * +9.885501157000760000000000000000; n2[8] += n1[3] * +1.482509921249920000000000000000; n2[8] += n1[4] * +1.872954736153460000000000000000; n2[8] += n1[5] * +4.395146499146220000000000000000; n2[8] += n1[6] * +1.204437401472700000000000000000; n2[8] += n1[7] * -1.075286051094170000000000000000; n2[8] += n1[8] * +4.791327729885490000000000000000; n2[8] += n1[9] * +6.381331089142460000000000000000; n2[8] += n1[10] * -2.762226120962530000000000000000; n2[8] += nBias * -6.667791334580280000000000000000; n2[9] += n1[0] * -7.383351769752200000000000000000; n2[9] += n1[1] * -1.920348508819890000000000000000; n2[9] += n1[2] * +0.365468057742154000000000000000; n2[9] += n1[3] * -11.695367793643700000000000000000; n2[9] += n1[4] * +2.935190074269910000000000000000; n2[9] += n1[5] * -7.163124060011880000000000000000; n2[9] += n1[6] * -0.056029364160910100000000000000; n2[9] += n1[7] * +2.753800500537790000000000000000; n2[9] += n1[8] * -7.037105899218720000000000000000; n2[9] += n1[9] * -2.637797264745060000000000000000; n2[9] += n1[10] * +6.707215041796490000000000000000; n2[9] += nBias * +12.800266900275800000000000000000; n2[10] += n1[0] * +0.035131157727483800000000000000; n2[10] += n1[1] * +7.586896965614590000000000000000; n2[10] += n1[2] * -1.811246950847870000000000000000; n2[10] += n1[3] * +2.266454484689060000000000000000; n2[10] += n1[4] * -2.841614704366960000000000000000; n2[10] += n1[5] * -2.908409925761140000000000000000; n2[10] += n1[6] * +4.689504828256630000000000000000; n2[10] += n1[7] * -7.732988207874790000000000000000; n2[10] += n1[8] * -0.409091136405229000000000000000; n2[10] += n1[9] * -2.813707869991230000000000000000; n2[10] += n1[10] * +1.269407366954320000000000000000; n2[10] += nBias * -11.228120396965200000000000000000; n2[0] = Sigmoid(n2[0]); n2[1] = Sigmoid(n2[1]); n2[2] = Sigmoid(n2[2]); n2[3] = Sigmoid(n2[3]); n2[4] = Sigmoid(n2[4]); n2[5] = Sigmoid(n2[5]); n2[6] = Sigmoid(n2[6]); n2[7] = Sigmoid(n2[7]); n2[8] = Sigmoid(n2[8]); n2[9] = Sigmoid(n2[9]); n2[10] = Sigmoid(n2[10]); n3[0] += n2[0] * -10.269949214757000000000000000000; n3[0] += n2[1] * -21.746826250043100000000000000000; n3[0] += n2[2] * -13.377425495871500000000000000000; n3[0] += n2[3] * +20.131711195162200000000000000000; n3[0] += n2[4] * +3.630649498875370000000000000000; n3[0] += n2[5] * +7.927908836803810000000000000000; n3[0] += n2[6] * -6.244294770426220000000000000000; n3[0] += n2[7] * +14.539024738408800000000000000000; n3[0] += n2[8] * -20.518277064030700000000000000000; n3[0] += n2[9] * -8.147176193702250000000000000000; n3[0] += n2[10] * +3.985077217369140000000000000000; n3[0] += nBias * -2.069220738662540000000000000000; n3[1] += n2[0] * -2.629991784812010000000000000000; n3[1] += n2[1] * +1.235404622665840000000000000000; n3[1] += n2[2] * +4.511191332760550000000000000000; n3[1] += n2[3] * +1.117835652196080000000000000000; n3[1] += n2[4] * -1.975977956638030000000000000000; n3[1] += n2[5] * -0.173180221712867000000000000000; n3[1] += n2[6] * -3.080336972270120000000000000000; n3[1] += n2[7] * -3.342891713857680000000000000000; n3[1] += n2[8] * -3.105377439227040000000000000000; n3[1] += n2[9] * -1.144820490473700000000000000000; n3[1] += n2[10] * +1.391111197999950000000000000000; n3[1] += nBias * +14.178852808317800000000000000000; n3[2] += n2[0] * -2.988766482512570000000000000000; n3[2] += n2[1] * -1.731072541906170000000000000000; n3[2] += n2[2] * -3.961715580024340000000000000000; n3[2] += n2[3] * -1.230947589285870000000000000000; n3[2] += n2[4] * -4.054910490209060000000000000000; n3[2] += n2[5] * +0.357410424247422000000000000000; n3[2] += n2[6] * +3.186131811414850000000000000000; n3[2] += n2[7] * +3.504820095640220000000000000000; n3[2] += n2[8] * +3.163639885475280000000000000000; n3[2] += n2[9] * +1.252429372460750000000000000000; n3[2] += n2[10] * -1.688444052514330000000000000000; n3[2] += nBias * -7.703411584549960000000000000000; n3[3] += n2[0] * -1.675504445360660000000000000000; n3[3] += n2[1] * -0.875580069209417000000000000000; n3[3] += n2[2] * +0.384819117555583000000000000000; n3[3] += n2[3] * +0.551772531482094000000000000000; n3[3] += n2[4] * -1.582590016692530000000000000000; n3[3] += n2[5] * +0.071129611318635900000000000000; n3[3] += n2[6] * -0.069489682487470900000000000000; n3[3] += n2[7] * -0.411843101462375000000000000000; n3[3] += n2[8] * +0.336844052073652000000000000000; n3[3] += n2[9] * +0.363527779498611000000000000000; n3[3] += n2[10] * -0.370198410550289000000000000000; n3[3] += nBias * +0.939548200314781000000000000000; n3[4] += n2[0] * -1.635407589412030000000000000000; n3[4] += n2[1] * -6.801189572166760000000000000000; n3[4] += n2[2] * -3.091272089100480000000000000000; n3[4] += n2[3] * +6.164151794697130000000000000000; n3[4] += n2[4] * +2.559843921611520000000000000000; n3[4] += n2[5] * +1.822512251245060000000000000000; n3[4] += n2[6] * -1.667048039668770000000000000000; n3[4] += n2[7] * +3.721686605556800000000000000000; n3[4] += n2[8] * -5.447551011619960000000000000000; n3[4] += n2[9] * -1.991471925304810000000000000000; n3[4] += n2[10] * +1.185158674828100000000000000000; n3[4] += nBias * -2.025406126529480000000000000000; n3[5] += n2[0] * +7.735871489848910000000000000000; n3[5] += n2[1] * -14.014885569929700000000000000000; n3[5] += n2[2] * -0.137042535178500000000000000000; n3[5] += n2[3] * -10.353164541542800000000000000000; n3[5] += n2[4] * +4.626315452601850000000000000000; n3[5] += n2[5] * -6.219803137242290000000000000000; n3[5] += n2[6] * +12.564965585823000000000000000000; n3[5] += n2[7] * -1.472476290207730000000000000000; n3[5] += n2[8] * +3.172661298287610000000000000000; n3[5] += n2[9] * -6.561266052247330000000000000000; n3[5] += n2[10] * +0.740929404431407000000000000000; n3[5] += nBias * -11.608124971156700000000000000000; n3[6] += n2[0] * -2.030721277850380000000000000000; n3[6] += n2[1] * -1.074645408268600000000000000000; n3[6] += n2[2] * +5.396330543696730000000000000000; n3[6] += n2[3] * +4.108086896723300000000000000000; n3[6] += n2[4] * -6.666844267499770000000000000000; n3[6] += n2[5] * -1.343704518624260000000000000000; n3[6] += n2[6] * -2.233470709338310000000000000000; n3[6] += n2[7] * -5.179260614484640000000000000000; n3[6] += n2[8] * +3.682151466203650000000000000000; n3[6] += n2[9] * +6.036632325594750000000000000000; n3[6] += n2[10] * -0.302461785008180000000000000000; n3[6] += nBias * -8.411198804212670000000000000000; n3[7] += n2[0] * +4.950096657862470000000000000000; n3[7] += n2[1] * -2.920160286593500000000000000000; n3[7] += n2[2] * +0.130167619332023000000000000000; n3[7] += n2[3] * +0.864327587821356000000000000000; n3[7] += n2[4] * +2.821366728847990000000000000000; n3[7] += n2[5] * -5.408668144929580000000000000000; n3[7] += n2[6] * -5.587973028211790000000000000000; n3[7] += n2[7] * -10.365451491752300000000000000000; n3[7] += n2[8] * -6.999302112816390000000000000000; n3[7] += n2[9] * +3.142955261328210000000000000000; n3[7] += n2[10] * -0.525693530537582000000000000000; n3[7] += nBias * -2.877485675533660000000000000000; n3[8] += n2[0] * +6.847179332986710000000000000000; n3[8] += n2[1] * +2.186718604451560000000000000000; n3[8] += n2[2] * +9.441346623688950000000000000000; n3[8] += n2[3] * -15.402088646727100000000000000000; n3[8] += n2[4] * +7.670213029887570000000000000000; n3[8] += n2[5] * -10.696562550347000000000000000000; n3[8] += n2[6] * -6.256378841206420000000000000000; n3[8] += n2[7] * -2.215616275173120000000000000000; n3[8] += n2[8] * -4.533332894218320000000000000000; n3[8] += n2[9] * -12.632245422290200000000000000000; n3[8] += n2[10] * +12.906549617455500000000000000000; n3[8] += nBias * -8.056687016678990000000000000000; n3[9] += n2[0] * +2.825566032438510000000000000000; n3[9] += n2[1] * -1.995429164558210000000000000000; n3[9] += n2[2] * -3.987048640864750000000000000000; n3[9] += n2[3] * -1.678836654232960000000000000000; n3[9] += n2[4] * +2.989273480991430000000000000000; n3[9] += n2[5] * -4.262513770084990000000000000000; n3[9] += n2[6] * +3.235304911752820000000000000000; n3[9] += n2[7] * -2.111448191132830000000000000000; n3[9] += n2[8] * +2.773979887894940000000000000000; n3[9] += n2[9] * +0.962734766581106000000000000000; n3[9] += n2[10] * -0.654899173534113000000000000000; n3[9] += nBias * -8.598127757104200000000000000000; n3[10] += n2[0] * -0.669782460464535000000000000000; n3[10] += n2[1] * -0.775979335388749000000000000000; n3[10] += n2[2] * +2.023205374530870000000000000000; n3[10] += n2[3] * +0.815641961225364000000000000000; n3[10] += n2[4] * -1.609157586985470000000000000000; n3[10] += n2[5] * -0.656095032947909000000000000000; n3[10] += n2[6] * -0.957200138451105000000000000000; n3[10] += n2[7] * -1.933127201798100000000000000000; n3[10] += n2[8] * +0.935579469067900000000000000000; n3[10] += n2[9] * +1.430762185402600000000000000000; n3[10] += n2[10] * -0.224508186889039000000000000000; n3[10] += nBias * -3.908606998813300000000000000000; n3[0] = Sigmoid(n3[0]); n3[1] = Sigmoid(n3[1]); n3[2] = Sigmoid(n3[2]); n3[3] = Sigmoid(n3[3]); n3[4] = Sigmoid(n3[4]); n3[5] = Sigmoid(n3[5]); n3[6] = Sigmoid(n3[6]); n3[7] = Sigmoid(n3[7]); n3[8] = Sigmoid(n3[8]); n3[9] = Sigmoid(n3[9]); n3[10] = Sigmoid(n3[10]); n4[0] += n3[0] * +1.094631904038280000000000000000; n4[0] += n3[1] * -4.043197835684060000000000000000; n4[0] += n3[2] * -1.704594634558500000000000000000; n4[0] += n3[3] * +0.035858060880037600000000000000; n4[0] += n3[4] * -0.104834237925640000000000000000; n4[0] += n3[5] * +1.227985426017880000000000000000; n4[0] += n3[6] * +4.500387561964700000000000000000; n4[0] += n3[7] * +5.198864774068460000000000000000; n4[0] += n3[8] * +1.305028661980060000000000000000; n4[0] += n3[9] * -1.168834206628590000000000000000; n4[0] += n3[10] * -0.845302944103631000000000000000; n4[0] += nBias * +4.037998958241170000000000000000; return n4[0]; } static int IsPrime(int v) // v: 0 ~ 1023 { double n0[] = { v & 0x001 ? 1.0 : 0.0, v & 0x002 ? 1.0 : 0.0, v & 0x004 ? 1.0 : 0.0, v & 0x008 ? 1.0 : 0.0, v & 0x010 ? 1.0 : 0.0, v & 0x020 ? 1.0 : 0.0, v & 0x040 ? 1.0 : 0.0, v & 0x080 ? 1.0 : 0.0, v & 0x100 ? 1.0 : 0.0, v & 0x200 ? 1.0 : 0.0, }; return 0.5 < IsPrime_ML(n0); } int main() { int c; for(c = 0; c < 1024; c++) if(IsPrime(c)) printf("%u\n", c); }
2022.11.3 t0003.c , t0004.c , t0005B.c にバグがあったのでこっそり修正