65,187
社区成员




// 判断n是否为质数
bool IsPrimeNumber(int n)
{
if (n==2)
{
return true;
}
if (n%2==0)
{
return false;
}
int sqrtn=(int)sqrt((double)n);
bool flag=true;
for (int i=3;i<=sqrtn;i+=2)
{
if (n%i==0)
{
flag=false;
}
}
return flag;
}
bool isPrime(size_t n)
{
static size_t const smallPrimes[] = {
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131,
137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373,
379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457,
461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557,
563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641,
643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827,
829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929,
937, 941, 947, 953, 967, 971, 977, 983, 991, 997
};
static size_t const smallPrimesNo = sizeof(smallPrimes)/sizeof(smallPrimes[0]);
for(size_t i = 0; i < smallPrimesNo && smallPrimes[i] <= n; ++i)
{
if(smallPrimes[i] == n)
{
return true;
}
}
//TODO: generic algorithim goes here
return false;
}
效率比较高的素数判断方法(C++版本)
#include<iostream>
#include<cmath>
using namespace std;
bool prime( int num)
{
if (num==2||num==3||num==5)
return true;
unsigned long c=7;
if (num%2==0||num%3==0||num%5==0||num==1)
return false;
int maxc=int(sqrt(num));
while (c<=maxc)
{
if (num%c==0)
return false;
c+=4;
if (num%c==0)
return false;
c+=2;
if (num%c==0)
return false;
c+=4;
if (num%c==0)
return false;
c+=2;
if (num%c==0)
return false;
c+=4;
if (num%c==0)
return false;
c+=6;
if (num%c==0)
return false;
c+=2;
if (num%c==0)
return false;
c+=6;
}
return true;
}
int main()
{
int num;
cin>>num;
if (prime(num))
cout<<num<<" is a prime number."<<endl;
else
cout<<num<<" is not a prime number."<<endl;
return 0;
}