c - 最小素数生成器 C

标签 c

我必须在 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/

相关文章:

c - 最容易在C中实现在线排序数据结构

c - 卡在数组和字符串中与 strcmp c 进行比较

c - 改进我执行 malloc 和 free 的方式

c - 马尔可夫链。实现添加方法

c - C 中 Linux 上的奇怪 cbrt() 结果

c - 使用消息队列的 C 生产者/消费者中的段错误

c - c中的变量按位运算

c++ - 即使我解压了 4.8.1,GCC -v 也会返回 GCC 4.7.3?

c++ - 何时以及如何对不同类型的文件进行读/写 block (即暂停您的程序)?

c - 红外十六进制比较