我必须在 C 中创建一个最小素数生成器(我们需要至少有两位数的最小素数),并且我不能使用表格。所以我的想法是首先找到所有素数,然后使用掩码找到所有素数每个数字的子序列,最后检查每个子序列是否不是素数。我找不到最小素数,因为我没有设置条件来检查子序列是否是素数?(我的代码还没有准备好,所以可能有一些错误但它运行) 我的代码
#include <stdio.h>
#define MAXNUMB 100
int main ()
{
int i,j,x,mask,max=1,mult,sub;
for (i = 11 ; i < MAXNUMB; i += 2 ) {
for (j = 3; j * j <= i; j += 2) {
if (i % j == 0) {
break;
}
}
if (j * j > i) {
int length = 0;
int tmp=i;
while (tmp != 0) {
tmp /= 10;
length++;
}
for (x=1;x<length*2;x++) {
mask=x;
mult=1;
sub=0;
int num=i;
while ( num != 0 ) {
if ( mask % 2 == 1 ) {
sub += num % 10 * mult;
mult *= 10;
}
num /= 10;
mask /= 2;
}
printf ("%d \n",sub);
}
printf ("%d is minimal prime \n",i);
}
}
}
最佳答案
如果 MAXNUMB 不太大,那么您可以使用 Sieve_of_Eratosthenes 快速找到 MAXNUMB 之前的所有素数。 。之后,您可以通过从 1 到 2^n-1 计数来获取 n 位数字的每个子序列,并使用当前计数的位模式来指定当前子序列。检查筛子中的每个子序列。
如果 MAXNUMB 太大,那么你可以将筛子建立到 sqrt(MAXNUMB),这样当你测试一个数字是否是素数时,你只需要检查它是否可以被任何素数整除,而不是检查它是否是素数能整除任何奇数。
关于c - 最小素数生成器 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33838621/