C 为什么素数生成函数会生成一堆零?

C 为什么素数生成函数会生成一堆零?,c,gcc,codeblocks,primes,C,Gcc,Codeblocks,Primes,我一直在尝试重新开始编码,特别是在C语言中。所以我使用了Project Euler作为项目的想法,我采用了关于10001素数的方法。但是,当我运行下面的代码时,它返回2、0、0、0等等。问题是什么?我看过其他人提出的问题,但我没有发现像C这样的低级语言 /*########################################################## * The 10,001st Prime * Rob Merrell * 21 January 2016 ###

我一直在尝试重新开始编码,特别是在C语言中。所以我使用了Project Euler作为项目的想法,我采用了关于10001素数的方法。但是,当我运行下面的代码时,它返回2、0、0、0等等。问题是什么?我看过其他人提出的问题,但我没有发现像C这样的低级语言

/*##########################################################
*   The 10,001st Prime
*   Rob Merrell
*   21 January 2016
##########################################################*/

#include <stdio.h>
#include <math.h>

int main() {
    int Int = 2; int PrimeCheck = 2; int Count = 0; int PrimeCount = 0;
    int Primes[10002]; Primes[0] = 0;
    if (Int < PrimeCheck) {
        for (Int = 2; Int < PrimeCheck;PrimeCount < 10001) {
            if (PrimeCheck%Int != 0) {
                Int++;
                continue;
            }
            else {
                PrimeCheck++;
                Int = 2;
                continue;
            }
        }
    }
    else {
        Count++;
        Primes[Count] = PrimeCheck;
        PrimeCount++; PrimeCheck++;
        Int = 2;
    }
    int i = 1;
    for(i = 1; i < 10001; i++) {
        printf("%d ", Primes[i]);
    }
    return 0;
}
/*##########################################################
*第10001素数
*罗布·梅雷尔
*2016年1月21日
##########################################################*/
#包括
#包括
int main(){
int=2;int-PrimeCheck=2;int-Count=0;int-PrimeCount=0;
整数素数[10002];素数[0]=0;
if(Int
您的问题更多的是关于问题解决,然后是用C(或任何其他语言)编程,因为您处理问题的方法有缺陷,正如其他人在评论中所指出的那样。下面是一种思考这个问题的方法:

所以,如果我让你手工做这个问题,你会怎么做

最有可能的情况是,您会执行以下操作:

  • (步骤1)选择一个起始测试数,比如4(知道2和3是素数)
  • (步骤2)将试用除数设置为2
  • (步骤3)如果您的数字可以被试除数整除,请转至步骤7
  • (第4步)将你的小除数增加1,第3步
  • (步骤5)记下下下一个素数
  • (步骤6)检查是否找到10001个素数,如果找到,结束
  • (步骤7)将测试编号增加1,然后转至步骤2
因此,在伪代码中,上面的内容如下所示:

primeCnt <- 2
testNum <- 4   

while (primeCnt <= 10001) do
    divisor <- 2
    isComposite <- false 
    while (divisor < testNum)
        if(testNum % divisor == 0)   // we found a factor  
            isComposite <- true
            break
         end if
         divisor <- divisor + 1
    done

    if (!isComposite)     // we found a prime
        primeCnt <- primeCnt + 1
        print  testNum
    end if

    testNum <- testNum + 1

done 

primeCnt
int
?我的眼睛!它们会燃烧!!把它拿走!!!由于
Int
不小于
PrimeCheck
,因此第一个代码块永远不会运行,因此您永远不会找到所有的prime。您只需运行
else
子句,它将
Count
递增一次,并只设置
Primes[1]
.Er。。。除了第一个素数外,你的函数不生成任何素数。这正是您在输出中看到的。通常,当您必须生成许多数字时,代码中会有某种循环(显式循环或递归或其他)。在生成代码中没有类似的内容。那么,你希望它如何生成许多数字呢?也许你打算在整个过程中进行循环?没有下次了。如果
语句不在循环中,则在程序启动时只运行一次。