所以我正在尝试Euler项目的问题7。
通过列出前六个素数:2,3,5,7,11和13,我们可以看到第6个素数是13。 什么是10 001主数?
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int a){
if (a==2||a==3){
return true;
}
if (a%2==0){
return false;
}
bool prime=true;
for (int b=2;b<sqrt(a);b++){
if (a%b==0)
prime=false;
}
if (prime==true)
return true;
else
return false;
}
int main(){
int infinite=0;
long long int primecounter=0;
for (int c=2;infinite==0;c++){
if (isPrime(c)==true){
primecounter++;
//cout<<c<<endl;
if (primecounter==10001)
{cout<<c;
break;}
}
}
return 0;}
这是我到目前为止所提出的。它适用于我测试的少数数字,如第6个素数等。但是,当我为第1000个素数运行它时,它给了我104021,答案是错误的。有人能告诉我我的代码有什么问题吗?
答案 0 :(得分:8)
错误的地方是b < sqrt(a)
。想想a = 25,在这种情况下会发生什么?
其他答案已在评论中指出。
答案 1 :(得分:1)
虽然这个特定问题不需要,但您应该查看Sieve of Eratosthenes算法。你迟早会需要它来解决与素数相关的问题。
答案 2 :(得分:0)
你可以在没有'cmath'帮助的情况下解决它。逻辑就像...... 要检查数字是否为素数,请将计数器变量设置为0;写一个循环,将数字除以每个小于1的数字。如果一个数字完全除以它,计数器将增加1;对于素数,counetr正好是2。 要计算大数,你也应该选择一个合适的数据类型。我使用'long long int'作为数据类型。 我的项目euler问题没有7的代码如下。希望它可以帮助你。最好的祝福。这个程序的改进和改进是最受欢迎的。只有它消耗的时间,它需要一个多小时才能达到10001素数。
#include<iostream.h>
#include<conio.h>
class prime
{
long long int a;
long long int j,i;
public:
void display();
};
void prime::display()
{
j=0;
long long int count=0;
long long int count1=0;
while(count1!=10001)
{
j=j+1;
i=j;
while(i!=0)
{
if(j%i==0)
{
count++;
}
i--;
}
if(count==2)
{
count1++;
cout<<count1<<"\t"; //The serial number of the prime number.
cout<<j<<"\t";// This will diaply all prime numbers till 10001.
}
if(count1==10001)
{
cout<<"\nThe 10001th prime number is:"<<j;
}
count=0;
}
}
void main()
{
prime k;
clrscr();
k.display();
getch();
}