题目描述
如果两个素数之和的一半仍然是一个素数,则这三个素数可以组成一个等差素数组,如(3+7)/2=5,则(3,5,7)为一个等差素数组,编程求100以内的所有等差素数组。这里列出的3 5 7是符合题目要求的第一个等差素数组(注意:本题不考虑3个数相等的情况)。
输入
无
输出
若干行,每行3个数。空格隔开!(每行的三个数从小到大排列,先按第一个数从小到大输出等差素数组,如果第一个数相同,再按第二个数从小到大输出)
代码
#include<iostream>
#include<algorithm>//调用sort函数
#define endl '\n'
using namespace std;
bool isprime(int n){//判断n是否是素数
int fac=0;
for(int i=1;i<=n;i++){
if(n%i==0){
fac++;
}
}
return fac==2;
}
int main(){
for(int i=2;i<=100;i++){
for(int j=2;j<=100;j++){
if(isprime(i)&&isprime(j)){//判断i和j是否是素数
if((i+j)%2==0&&isprime((i+j)/2)){//判断i和j的和除以2是否能整除和是否是素数
if(i!=j&&i!=(i+j)/2&&j!=(i+j)/2){//判断这三个数是否相等
if(i<j){//防止重复
int a[3]={i,j,(i+j)/2};
sort(a,a+3);
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
}
}
}
}
}
}
return 0;
}
输出结果
3 5 7
3 7 11
3 11 19
3 13 23
3 17 31
3 23 43
3 31 59
3 37 71
3 41 79
3 43 83
5 11 17
5 17 29
5 23 41
5 29 53
5 47 89
7 13 19
7 19 31
7 37 67
7 43 79
11 17 23
11 29 47
11 41 71
11 47 83
13 37 61
13 43 73
17 23 29
17 29 41
17 53 89
19 31 43
19 43 67
23 41 59
23 47 71
23 53 83
29 41 53
29 59 89
31 37 43
37 67 97
41 47 53
43 61 79
47 53 59
47 59 71
53 71 89
59 71 83
61 67 73
61 79 97
67 73 79
5754



被折叠的 条评论
为什么被折叠?



