我编写了一个代码来检查整数是否为素数,无论何时我调用该函数,命令行都会挂起。 我在Windows 7中使用MingW
#include<iostream>
#include<math.h>
using namespace std;
bool checkPrime(int n);
int main()
{
int t,tempstart;
cout<<checkPrime(6);
return 0;
}
bool checkPrime(int n)
{
bool check=true;
for (int i = 0; i <(int) sqrt(n) ; i++)
{
if(n%i==0)
{
check=false;
cout<<"asas";
break;
}
}
return check;
}
答案 0 :(得分:4)
它不应该挂起,至少不能挂起n = 6
1.try this
而不是:
if(n%i==0)
写:
if((n%i)==0)
一些编译器在多操作条件下弄得一团糟,因此包围通常会有帮助
2.提到我应该从2
3.您是否尝试调试?
加快一点的提示(对于更大的n来说只需几千次)
1.I = 2,3,5,7,9,11,13,...
和其他人:
for (nn=sqrt(n),i=3;i<=nn;i+=2) ...
2.而不是sqrt(n)使用数字和半位
3.不要计算内部的sqrt(某些编译器不预先计算)
4.使用亚里士多德的筛子例如数组
BYTE sieve[4106301>>1]; //only odd numbers are important so the size is half and each bit hold one sieve value so the size is really 4106301*8 which is divided by:
可以拿着分隔物的筛子:
5.divide by primes
和使用
for (nn=sqrt(n),i=last prime+2;i<=nn;i++) ...
你也可以记住在某些列表中运行时计算的所有素数并使用它们
6.你可以将所有这些结合在一起
7.还有很多其他方法可以提高is_prime(n)的性能吗?
答案 1 :(得分:1)
根据C ++中的运算符优先级 %优先于== 所以你应该使用
if((n%i)==0)
祝你好运!