[6,n]中的素数之和为偶数的打印出来
2014-09-18 20:19
155 查看
题目就这么简单。
本题首先是求素数可以进行优化,采用之前的素数筛选法先把[6,N]中的素数找出来,但是有一个问题,必须从头开始筛选
【6,n】中的素数都是奇数,其实所有的素数中,只有2是偶数,[6,n]中的所有素数的和就是偶数,采用遍历的方法就可以把偶数找出来,算法复杂度为o(n2)
解法1:
解法2:
记得数学上有这样一个猜想:哥德巴赫猜想
任一大于2的偶数,都可表示成两个素数之和
所以可以从偶数入手,先找出偶数的两个素数,判断素数有没有在给定的范围内
(待实现)
本题首先是求素数可以进行优化,采用之前的素数筛选法先把[6,N]中的素数找出来,但是有一个问题,必须从头开始筛选
【6,n】中的素数都是奇数,其实所有的素数中,只有2是偶数,[6,n]中的所有素数的和就是偶数,采用遍历的方法就可以把偶数找出来,算法复杂度为o(n2)
解法1:
#include<iostream> #include<string.h> using namespace std; int main() { int n; int count = 0; int i; int j; int sum; cout<<"enter N(N>=6) = "; cin>>n; //build array int *array = new int[n+1]; int *save = new int[n+1]; //initialize the array //memset only used for char /*memset(array,0x1,sizeof(array));*/ //Screening of prime Numbers for(i = 2;i <= n;i++) array[i] = 1; for(i = 2;i <= n;i++) { if(array[i] == 1) { //j is used for counting for(j = i;j <= n/i;j++) { array[i*j] = 0; } } } cout<<"the prime numer is follows:"<<endl; for(i = 6;i <= n;i++) { if(array[i] == 1) { printf("%-4d ",i); save[count] = i; count++; } } cout<<"\n"<<endl; //print even numbers: cout<<count<<" even numbers are follows:"<<endl; delete array; array = new int[n+n+1]; for(i = 2;i <= n+n;i++) array[i] = 0; //可能会有重复的数,要进行筛选 //对重复的数字可以用哈希,但是如果数字太大反而需要太多额外空间的开销 得不偿失 for(i = 0;i <count-1;i++) { for(j = i+1;j < count;j++) { sum = save[i]+save[j]; array[sum] = 1; } } for(i = 6+6;i <= n+n;i++) { if(array[i] == 1) cout<<i<<" "; } cout<<endl; }
解法2:
记得数学上有这样一个猜想:哥德巴赫猜想
任一大于2的偶数,都可表示成两个素数之和
所以可以从偶数入手,先找出偶数的两个素数,判断素数有没有在给定的范围内
(待实现)
相关文章推荐
- 求100以内的素数的个数,并以每行显示5个数的方式打印出来
- 整数算法训练04—求100以内的素数,全部打印出来
- 判断101到200之间有多少个素数并将其打印出来
- 求100以内的素数,全部打印出来
- 4. 题目:求100以内的素数,全部打印出来
- 求100以内的素数,全部打印出来
- 题目:求100以内的素数,全部打印出来。
- 将100到200之间的素数打印出来
- 将一个偶数分解为两个素数的和并打印
- 求1到自然数m之间的素数(质数),并打印出来
- 求100以内的素数,全部打印出来
- java版本: 把手机号码里重复数字出现的次数按从多到少排列打印出来
- 使用两个线程交替打印0到100的奇数和偶数
- Java中打印出来完全相同的两个字符串,用equals方法比较返回的却是false的原因
- 在一个文件末尾增加字符串,并在控制台打印出来
- shell 打印偶数行奇数行
- 定义一个文件输入流,调用 read(byte[] b)方法将 exercise.txt 文件中的所有内容打印出来 (byte 数组的大小限制为 5)。
- 【C】打印100-200间素数,输出乘法口诀表,闰年的判断,求十个整数中最大值
- 打印panel上画出来的图形
- 射击运动员10 发打中90环有多少种可能,请编写程序计算出来,并打印出结果, 0 环和10环均有效。