c - 前N个素数优化

标签 c algorithm

我已经看到了一定数量的与该论点相关的问题,但是一旦没有人完全符合我的要求,我就会提出一个新问题。我必须计算前 N 个质数(示例中为 1000)。我提出了一个可以正常工作但根本没有优化的工作算法。

#include<stdio.h>
#define MAX_NUMBERS 1000
int main()
{
   int prime[MAX_NUMBERS]={0};
   int filled=0;
   prime[filled++]=2;
   int n=0,i=0;
   while(filled<MAX_NUMBERS) {
      for( n=prime[filled-1]+1; ;n++ ) {
         int found =0;
         for( i=0; i<filled && (found==0); i++ ) {
            if( (n%prime[i]) == 0 ) {
               found = 1;
            }
         }
         if( !found ) {
            break;
         }
       }
       /* we know that this always exists */
       prime[filled++]=n;
   }
   for(i=0;i<filled;i++) {
      printf( "prime number %d\n", prime[i] );
   }
   return 0;

有人知道如何优化吗?在这种情况下,是否有任何算法更改可以提供帮助?

最佳答案

最好的方法是通过像下面这样最简单且非常有效的筛分方法:-

Sieve of eratosthenes

关于c - 前N个素数优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20249695/

相关文章:

java - 在不使用 java 递归的情况下,为给定输入节点在二叉树中打印祖先节点

c - 打印一个数字的英文单词的程序

java - Java 中的按位运算符作用于两个字节

按顺序计算下一组的算法

r - 如何遍历对角条状矩阵并返回每个位置的索引?

algorithm - 从 2-3-4 树计算一组插入和删除的摊销时间

algorithm - 形状匹配软体动力学 - 实现公式

C: 'const' 限定符在带有 typedef 用法的参数列表中的含义

c - 在 sprintf 中隐藏整数

c - 如何通过 dockerfile 禁用 linux 空间随机化?