C++ 打印第1000个素数 #包括 使用名称空间std; int main(){ int ctr=0; int count=1;//计算第n个素数 int num=3; int div=2;//数字的潜在因子 while(count
通常有助于将这样的代码重构为具有明确定义和可测试行为的函数。例如,代码的内部是一个“C++ 打印第1000个素数 #包括 使用名称空间std; int main(){ int ctr=0; int count=1;//计算第n个素数 int num=3; int div=2;//数字的潜在因子 while(count,c++,C++,通常有助于将这样的代码重构为具有明确定义和可测试行为的函数。例如,代码的内部是一个“isPrime”函数,如果您这样定义它: #include <iostream> using namespace std; int main(){ int ctr = 0; int count = 1; //Counts the nth prime number int num = 3; int div = 2; //Potential factors of t
isPrime
”函数,如果您这样定义它:
#include <iostream>
using namespace std;
int main(){
int ctr = 0;
int count = 1; //Counts the nth prime number
int num = 3;
int div = 2; //Potential factors of the number
while(count <= 1000){
while(div < num){
if(num%div == 0){
ctr += 1; //If ctr is equal to 0, then num is prime
}
div += 1;
}
if(ctr == 0){ //If num is prime, count increases by 1
count += 1;
}
num += 1;
}
cout << num;
}
至于为什么你的代码不起作用。你应该调试它。逐行检查,看看它与你的期望有什么不同。从查找第三个素数开始,而不是第1000个素数 你的
isPrime
部分没有完成它应该做的事情。找出原因并不难,作为一个调试练习,你肯定应该这样做,而不是从stackoverflow得到一个简单的答案。\35;包括
int primeCount = 0;
int n = 1;
while (primeCount < 1000) {
if (isPrime(n++)) {
++primeCount;
}
}
--n;
std::cout << n << std::endl;
int main(){
int ctr=0;
int count=1;//计算第n个素数
int num=3;
int div=2;//数字的潜在因子
虽然(count你从未重置过div
或ctr
的值。你在课堂上讨论过调试程序了吗?仔细检查你的代码会发现问题所在。我明白了。@Daniel,谢谢你提醒我。另外,我将count=1
更改为count=2
,这修复了所有问题。这对提高性能有什么帮助s检查Desivable by 2,3,然后加两次,因为如果Desivable by偶数,则可以跳过检查numbers@Simon当然可以。我猜这是一个家庭作业,而性能不是第一要务。动态规划会更有帮助。
int primeCount = 0;
int n = 1;
while (primeCount < 1000) {
if (isPrime(n++)) {
++primeCount;
}
}
--n;
std::cout << n << std::endl;
#include <stdio.h>
int main(){
int ctr = 0;
int count = 1; //Counts the nth prime number
int num = 3;
int div = 2; //Potential factors of the number
while(count <= 1000){
while(div < num){
if(num%div == 0){
ctr += 1; //If ctr is equal to 0, then num is prime
}
div += 1;
}
if(ctr == 0){ //If num is prime, count increases by 1
count += 1;
}
num += 1;
ctr=0;
div=2;
}
printf("%d",num);
}