质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数 常规解法,一层for循环从头开始遍历,小于sqrt(n),如果n % i == 0那么则不是素数。
利用数学知识,所有的数都可以用 6n 6n+1 6n+2(3n+1) 6n+3(2n+1) 6n+4(3n+2) 6n+5 来表示,因为加括号的数肯定为素数,所以只需要判断6n+1和6n+5是否为素数,以及最初的1,2,3
#include <iostream>
#include <math.h>
using namespace std;
bool isPrime(int n){
if (n == 1) return false;
if (n == 2 || n == 3) return true;
if (n % 6 != 5 && n % 6 != 1) return false;
for (int i = 5; i < sqrt(n); i+=6){
if (n % i == 0 || n % (i + 2) == 0)
return false;
}
return true;
}
int main()
{
int n;
cin>>n;
if(isPrime(n))
cout<<n<<"是素数!"<<endl;
else
cout<<n<<"不是素数!"<<endl;
return 0;
}
|