25.试定义一个类 Number,求出所有符合下列条件的三元组(a,b,c): a、b、 c 均为 30 以内的素数,且它们的和也是一个素数。 例如,3,5 和 11 均是素数,且它们的和 3+5+11=19 也是素数,(3,5,11)是一个满足要求的三元组。 要求如下:
(1)私有数据成员
- int datd[50][4]: 每一行的后三个元素存储满足条件的一个三元组,第 0 个元素存储后三个元素的和。
- int count_data: 记录找到的符合题目要求的三元组的个数。
(2)公有成员函数
- Number(): 构造函数, 初始化数据成员 count_data。
- int isprime(int x): 判断参数 x 是否为素数,如果是返回 1,否则返回 0。
- void fund(): 找出 30 以内所有符合条件的三元组。
- void print():按输出示例格式输出结果。
(3) 主函数中对该类进行测试。
输出示例(部分)
共有 42 个三元组满足条件:
(3, 5, 11): 19
(3, 5, 23): 31
…
(19, 23, 29): 71
注意:
①元组不能出现相同的元素,如 2 2 3不符合条件
②是组合不是排列,即不允许两个元组元素相同但顺序不同,如19 23 29与29 23 19只能出现一个
#include<iostream>
using namespace std;
class Number{
int data[50][4],count;
public:
Number(){
count=0;
}
int prime(int n){
if(n==0||n==1)return 0;
for(int i=2;i<n;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
void fund(){
int t[30],len=0;
for(int i=0;i<30;i++){
if(prime(i)){
t[len++]=i;
}
}
for(int i=0;i<len-2;i++){
for(int j=i+1;j<len-1;j++){
for(int k=j+1;k<len;k++){
if(prime(t[i]+t[j]+t[k])){
data[count][0]=t[i];
data[count][1]=t[j];
data[count][2]=t[k];
data[count++][3]=t[i]+t[j]+t[k];
}
}
}
}
}
void print(){
for(int i=0;i<count;i++){
cout<<'('<<data[i][0]<<','<<data[i][1]<<','<<data[i][2]<<"):"<<data[i][3]<<endl;
}
cout<<"count="<<count<<endl;
}
};
int main(){
Number n;
n.fund();
n.print();
return 0;
}