stackprobe7s_memo

何処にも披露する見込みの無いものを書き落とす場所

よくある素数列挙サンプルコード集

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 にバグがあったのでこっそり修正