C 为什么素数生成函数会生成一堆零?
我一直在尝试重新开始编码,特别是在C语言中。所以我使用了Project Euler作为项目的想法,我采用了关于10001素数的方法。但是,当我运行下面的代码时,它返回2、0、0、0等等。问题是什么?我看过其他人提出的问题,但我没有发现像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 ###
/*##########################################################
* 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
primeCntint
?我的眼睛!它们会燃烧!!把它拿走!!!由于Int
不小于PrimeCheck
,因此第一个代码块永远不会运行,因此您永远不会找到所有的prime。您只需运行else
子句,它将Count
递增一次,并只设置Primes[1]
.Er。。。除了第一个素数外,你的函数不生成任何素数。这正是您在输出中看到的。通常,当您必须生成许多数字时,代码中会有某种循环(显式循环或递归或其他)。在生成代码中没有类似的内容。那么,你希望它如何生成许多数字呢?也许你打算在整个过程中进行循环?没有下次了。如果语句不在循环中,则在程序启动时只运行一次。