我的任务是使用CheckPrime函数打印前n个质数。我设法用一个数字做到了这一点,但是我应该怎么做才能使它起作用并向我显示第一个'n'质数?!
代码:
#include <iostream>
using namespace std;
int eprim(int num)
{
int bec=1,i;
for(i=2;i<=num/2;i++)
{
if(num%1==0)
{
bec=0;
break;
}
}
return bec;
}
int main()
{
int num,bec,i,n,
cout<<"intr numarul"<<endl;
cin>>num;
bec = eprim(num);
if (bec==1)
{
cout<<"este prim";
}
else
{
cout<<"Nu este prim";
}
return 0;
}
答案 0 :(得分:0)
进行循环,然后计数直到获得所需的号码。
int i = 0;
int number = 2;
while(i < n)
{
if(eprim(number) == ??)
{
++i; // is a prime number
}
++number;
}
我不知道您的函数应该返回什么,因为(num%1==0)
始终为真。
答案 1 :(得分:0)
您的素数检查功能是错误的,对于2到n / 2之间的每个数字,您都要测试它是否被1除,这对于每个数字都是微不足道的。 eprim
中的for循环将始终返回0。因此您的函数将说根本没有质数。
要解决此问题,请在素数检查功能内检查每个i的除法,而不是1,如下所示:
int eprim(int num)
{
int bec = 1, i;
for (i = 2; i <= num / 2; i++)
{
if (num % i == 0)
{
bec = 0;
break;
}
}
return bec;
}
现在,要检查每个数字,直到从输入中读取一个恒定的值,您需要在主函数内部添加另一个for循环:
int main()
{
int num, bec, i, n;
cout << "intr numarul" << endl;
cin >> num;
for (i = 2; i <= num; i++)
{
bec = eprim(i);
if (bec == 1)
{
cout << "este prim" << endl;
}
else
{
cout << "nu este prim" << endl;
}
}
return 0;
}
还请注意,通过仅检查(int)sqrt(num)之前的数字而不是num / 2,可以以更有效的方式进行素数检查。
答案 2 :(得分:0)
您的代码应如下所示:
#include <iostream>
using namespace std;
int main()
{
int prime = 1;
int counter = 1;
int numPrimes;
bool isPrime;
cout << "How many primes: ";
cin >> numPrimes;
while(counter <= numPrimes){
prime += 1;
isPrime = true;
for(int i = 2; i <= prime/2; i++){
if(prime % i == 0){
isPrime = false;
break;
}
}
if(isPrime){
cout << prime << endl;
counter += 1;
}
}
}