范围内寻找素数组合、它们的和也为素数
来源:互联网 发布:c语言中的ifdef ifndef 编辑:程序博客网 时间:2024/05/16 10:53
这一题难度对于我来说非同小可,从十几天前就一直卡住我的思路;今天我做出来的这一种方法在一开始我也想过,只不过快速的排除了,直到没有办法才又想了一下觉得可行。
这一题估计也是我在暑假里写的最长的程序,对于循环的应用要求极高!
/*试定义一个类 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*/#include<iostream>using namespace std;class Number{private: int datd[100][4]; //不能太小,防止调试时产生越界 int count_data;public: Number(); int isprime(int x); void fund(); void print();};Number::Number(){ count_data = 0;}int Number::isprime(int x){ if (x == 1) return 0; for (int i = 2; i < x; i++) { if (x%i == 0) return 0; } return 1;}void Number::fund(){ //把30以内的素数全部列出 int temp[15], count = 0; for (int i = 3; i < 30; i++) { if (isprime(i)) { temp[count] = i; count++; } } int temp_before[729][4]; int count_move = 0; //进行无差别赋值 for (int i = 0; i < count; i++) { for (int j = 0; j < count; j++) { for (int k = 0; k < count; k++) { temp_before[count_move][0] = temp[i]; temp_before[count_move][1] = temp[j]; temp_before[count_move][2] = temp[k]; temp_before[count_move][3] = temp[i] + temp[j] + temp[k]; count_move++; } } } //进行去重 for (int i = 0; i < count_move; i++) { if (temp_before[i][0] == temp_before[i][1] || temp_before[i][0] == temp_before[i][2] || temp_before[i][1] == temp_before[i][2]) { temp_before[i][3] = -1; continue; } if (temp_before[i][3] == -1) continue; for (int j = i + 1; j < count_move; j++) { int flag = 0; for (int k = 0; k < 3; k++) { if (temp_before[i][k] == temp_before[j][0]) flag++; if (temp_before[i][k] == temp_before[j][1]) flag++; if (temp_before[i][k] == temp_before[j][2]) flag++; } if (flag >= 3) { temp_before[j][3] = -1; } } } //把temp_before[][3]不为-1的进行赋值给datd count_data = 0; for (int i = 0; i < 729; i++) { if (temp_before[i][3] != -1 && isprime(temp_before[i][3])) { datd[count_data][0] = temp_before[i][0]; datd[count_data][1] = temp_before[i][1]; datd[count_data][2] = temp_before[i][2]; datd[count_data][3] = temp_before[i][3]; count_data++; } }}void Number::print(){ //输出语句 for (int i = 0; i < count_data; i++) { cout << "(" << ' '; for (int j = 0; j < 4; j++) { cout << datd[i][j] << ' '; if (j == 1 || j == 2 || j == 0) cout << ',' << ' '; } cout << ")" << endl; } cout << count_data << endl;}int main(){ Number num; num.fund(); num.print(); system("pause"); return 0;}
阅读全文
0 0
- 范围内寻找素数组合、它们的和也为素数
- 寻找0-2^32-1范围内所有的素数
- 自定义范围内的素数
- 求范围内的素数
- 一定范围内特定素数和
- 输出指定范围内的素数
- 求出范围内所有的素数
- 显示一定范围内的素数
- 大范围内素数的求法
- 筛检法求一定范围内的素数
- 一定范围内的素数个数
- 求一定范围内的素数
- 用函数输出素数和它们的和
- C++基础之寻找给定范围内素数并输出
- 寻找素数
- 寻找素数
- 寻找素数
- 寻找素数
- 使用数组而不是字典来存储有序集合
- Flask-过滤消息闪现
- Sublime Text 2/3 输入法(Fcitx)修复[Ubuntu(Debian)]
- Android NDK 环境搭建 之 起始篇NDK HelloWorld
- crackme之018
- 范围内寻找素数组合、它们的和也为素数
- Questionnaire
- 移动web开发之DPR
- 神经网络-感知器算法python代码实现
- 记录week1
- 【自动化测试】HttpClient 模拟用户登录与请求接口完成自动化测试
- poj 1182 并查集经典
- Linux的学习笔记05:编写shell script
- ACM_博弈入门