筛子法求质数
来源:互联网 发布:韩顺平php全套视频400 编辑:程序博客网 时间:2024/06/12 01:25
给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
#include<iostream>using namespace std;//筛子法求质数 可以参考亲和数 //6~N的质数,打印两两质数为偶数的所有这些偶数//因为质数除开2以外都是奇数,那么大于6的偶数都是奇数,那么把6~N之间的质数都求出来,打印两两的和就可以了。 int main(){ cout << "输入N,产生的质数不大于范围 (6~N): "; int n; cin >> n ; int *array = new int[n+n+1];// 定义array是一个数组指针 //init for (int i = 0; i <= n+n ; i++) array[i]=i; for(int i =2; i*i <= n; i++) for(int j=i+i; j <= n ; j+=i) array[j]=0; int count=0; //统计质数的个数 for (int i = 6; i <= n ; i++){ if(array[i] == i){ cout << array[i]<< " "; count++; } } cout<<endl<<"一共有"<<count<<"个质数"; cout <<endl<<"打印所有两两和为偶数,打印所有偶数 "<<endl; //打印 两两之和为偶数的所有偶数 for (int i = 6; i <= n ; i++){ for (int j = i+1; j <= n ; j++) if(array[i] == i&&array[j] == j){ int sum= array[i] + array[j]; array[sum]=1; } } for (int i = 6+6; i <=n + n ; i++){ if(array[i] == 1) cout << i << " "; } system("pause"); return 0; }
//还有一种思路:
任一大于2的偶数,都可表示成两个素数之和
所以6到N内的所有偶数都是由两个奇素数相加得到的(素数只有一个是偶数(废话= =))
所以只要对于每一个偶数,看它的两个奇素数是不是都在6,N里面就行了。
具体的对于一个偶数k,如果他可以由两个奇素数组成,且这两个奇素数没有一个是3或者5,那么这个偶数就是我们要找的偶数了
如果包含3或者5,那么只能通过不断枚举6,N内的素数进行判断了。
0 0
- 筛子法求质数
- 求质数的筛子
- [转载 from 子清行]求质数 之 筛子法(C语言描述)
- 筛选法求质数
- 用筛选法求质数
- 用埃拉托色尼筛网法求质数
- PHP筛选法求质数。
- 筛选法求质数(注解)
- 用筛选法求质数
- 筛子
- 求质数
- 求质数
- 求质数
- 求质数
- 求质数
- 求质数
- 求质数
- 求质数
- Django QuerySet的select_related()函数
- MAC下Lua开发(3)---LUA调用C++
- MySql学习笔记
- github如何删除一个repository(仓库)
- 算法导论第5章5.4概率分析和随机算法
- 筛子法求质数
- opencv haar+adaboost使用心得
- Django外键的删除
- wince 中使用HttpSendRequest函数POST数据时应该注意的一点
- Python中生成唯一码(uuid的使用)
- jquery集合遍历
- edx 学习备忘
- ubuntu linux下建立stm32开发环境: GCC安装以及工程Makefile建立
- 排序算法(七):归并排序