我一直在努力重新编写代码,特别是在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;
}
答案 0 :(得分:0)
你的问题更多的是解决问题,然后用C语言(或任何其他语言)进行编程,因为你的问题解决方法是错误的,正如其他人在评论中所指出的那样。这是一种思考这个问题的方法:
所以,如果我要求你手动解决这个问题,你会怎么做?
最有可能的是,你会做类似的事情:
所以,在伪代码中,上面看起来像这样:
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
你应该可以将上面的伪代码翻译成C.显然,上面的代码没有优化。
关于Project Euler#7的一些事情 -