1007 素数对猜想
引入:
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
语言:
c++
分析: 素数总是 6k-1(k=1,2,3… …)或者6k+1(k=1,2,3… …),所以每次只判断 6k 两侧的数即可(6k、6k+1、6k+2… …、6k+5只有里6k+1和6k+5可能为素数,6k+5等价于6k-1)。
再判断一个数是否为素数时只需要判断从2到根号n的数能否被n整除,如果存在可以被整除的数则不是素数,两者中其中一个不是素数则不符合“素数对猜想”,令flag=0,则符合要求的素数对数量不变;两者都是素数且相差为2时flag=1,符合要求的素数对数量则需要加1。
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int N;
cin >> N;
if (N >= 5){
int k=1;
int count=1;
while (6 * k + 1 <= N){
int a = 6 * k - 1;
int b = 6 * k + 1;
int a_sqrt = (int)sqrt(a);
int b_sqrt = (int)sqrt(b);
int flag = 1;
for (int i = 2; i <= a_sqrt; i++){
if (a % i == 0) flag = 0;
}
for (int i = 2; i <= b_sqrt; i++){
if (b % i == 0) flag = 0;
}
if (flag == 1) count++;
k++;
}
cout << count;
return 0;
}
else{
cout << 0;
return 0;
}
}