C-下10个素数

C-下10个素数,c,C,我在这里写的程序有点问题。 它应该打印给定值的下10个素数——当然,它不起作用。我的逻辑在这里是错误的 例如,如果程序读取数字: 2 它应该打印: 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 代码: #include <stdio.h> int main() { int n, i, count, primenumber = 1; // primenumber is a flag printf("Insert a number:\n"

我在这里写的程序有点问题。 它应该打印给定值的下10个素数——当然,它不起作用。我的逻辑在这里是错误的

例如,如果程序读取数字:

2 
它应该打印:

3, 5, 7, 11, 13, 17, 19, 23, 29, 31
代码:

#include <stdio.h>

int main() {
    int n, i, count, primenumber = 1; // primenumber is a flag
    printf("Insert a number:\n");
    scanf("%d", &n);
    for (count = 0, n++; count < 10; n++, count++ ) {
        for (i = 2; i < n; i++) {
            if (n % i == 0) {
                primenumber = 0;
                break;
            }
        }
        if (primenumber)
            printf("%d\n", n);
    }
    return 0;
}

我决定不删除这篇文章。我相信总有一天会有人发现它很有用。

这是您修改过的工作代码。 在每个步骤中,您都应该重新初始化
primenumber=1
,否则它只给出一个数字。当你找到素数时,计数也应该增加,否则就不会增加

#include <stdio.h>

int main() {
    int n, i, count, primenumber = 1; // primenumber is a flag
    printf("Insert a number:\n");
    scanf("%d", &n);
    for (count = 0, n++; count < 10; n++ ) {
        primenumber = 1;
        for (i = 2; i < n; i++) {
            if (n % i == 0) {
                primenumber = 0;
                break;
            }
        }
        if (primenumber){
            count++;
            printf("%d\n", n);
        }

    }
    return 0;
}
#包括
int main(){
int n,i,count,primenumber=1;//primenumber是一个标志
printf(“插入一个数字:\n”);
scanf(“%d”和“&n”);
对于(计数=0,n++;计数<10;n++){
素数=1;
对于(i=2;i
将代码拆分一点,再排列一点,然后呈现出来

int isPrime ( int n )
{
    if (n <= 1) return 0; // zero and one are not prime
    unsigned int i;
    for (i=2; i*i<=n; i++) {
        if (n % i == 0) return 0;
    }
    return 1;
}

int main() {
    int n, count; // primenumber is a flag
    printf("Insert a number:\n");
    scanf("%d", &n);
    count = 0 ;
    n++ ;
    for ( ; count < 10; n++  ) {

        if (isPrime(n)) { // if its Prime, print and increase count
            printf("%d\n", n);
            count ++;
        }
        // Check next number until we get all our numbers
    }

    return 0; // All Done

}
intisprime(intn)
{

如果(n这里有一个解决方案,它将减少处理时间,通常用于较大的n值:

#include <stdio.h>
#include <math.h>
int main() {
int n, i, count= 1, primenumber = 1, root; // primenumber is a flag
printf("Insert a number:\n");
scanf("%d", &n);
n++;
while(count!=11)
{
 root= sqrt(n);//You only need to check for range 2 to square root of number. This is the key ingredient of the code to reduce time complexity 
 primenumber = 1;
 for(i=2; i<= root; i++)
    {
    if(n%i==0)//As soon as it finds a number which perfectly divides it, break from loop checking n's nature
        {
        primenumber = 0;
        break;
        }       
    }
    if(primenumber==1)
        {
        printf("%d \t", n);
        count++;
        }
    n++;                
}
}
#包括
#包括
int main(){
int n,i,count=1,primenumber=1,root;//primenumber是一个标志
printf(“插入一个数字:\n”);
scanf(“%d”和“&n”);
n++;
而(计数!=11)
{
root=sqrt(n);//您只需要检查数字的范围2到平方根。这是代码减少时间复杂性的关键因素
素数=1;

对于(i=2;iHail)抽象方法!拆分代码也是一种很好的方法(可能更具组织性)在这种情况下的想法。不过,我还是决定了一种更简单的方法。谢谢。哦!谢谢。我没有刷新页面,所以我没有看到你的答案。我已经解决了这个问题。不过,感谢大家的关注——我们最终得到了类似的解决方案!如果你想进一步提高,你应该只检查n是否可以被奇数除。我认为这会起作用ally增加复杂性,因为如果(i%2!=0)
,我们将检查每个i
。因此,如果i是奇数,它将执行此附加步骤。当然@Valinho表示(i=3;i@Valinho“为什么不把你能想到的所有改进都加上呢?”花费在次要改进上的时间/精力/金钱可以更好地应用于主要改进。@这取决于chux。我敢打赌,出于科学目的,每个次要改进都将是一个良好的进步。与其用解决方案编辑您的问题,不如将其还原为未回答的状态,并发布您自己的答案。您甚至可以接受它或另一个好答案。
#include <stdio.h>
#include <math.h>
int main() {
int n, i, count= 1, primenumber = 1, root; // primenumber is a flag
printf("Insert a number:\n");
scanf("%d", &n);
n++;
while(count!=11)
{
 root= sqrt(n);//You only need to check for range 2 to square root of number. This is the key ingredient of the code to reduce time complexity 
 primenumber = 1;
 for(i=2; i<= root; i++)
    {
    if(n%i==0)//As soon as it finds a number which perfectly divides it, break from loop checking n's nature
        {
        primenumber = 0;
        break;
        }       
    }
    if(primenumber==1)
        {
        printf("%d \t", n);
        count++;
        }
    n++;                
}
}