算法题:给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
来源:互联网 发布:阿里云香港服务器延迟 编辑:程序博客网 时间:2024/05/18 20:10
算法题:给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
对于给定的N,我们可以用筛法求素素数的方法在O(n)的时间复杂度内求出所有的素数。
然后如何求给定的[6,N]内的数字内的偶数是由两个素数[6,N]组成的呢。
记得数学上有这样一个猜想:哥德巴赫猜想
任一大于2的偶数,都可表示成两个素数之和
所以6到N内的所有偶数都是由两个奇素数相加得到的(素数只有一个是偶数(废话= =))
所以只要对于每一个偶数,看它的两个奇素数是不是都在6,N里面就行了。
具体的对于一个偶数k,如果他可以由两个奇素数组成,且这两个奇素数没有一个是3或者5,那么这个偶数就是我们要找的偶数了
如果包含3或者5,那么只能通过不断枚举6,N内的素数进行判断了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = 1000001;
bool isprime[MAXN];
int num_p;
int prime[MAXN];
bool p[MAXN];
void makeprime(){
memset(isprime,false,sizeof(isprime));
num_p = 0;
for(int i = 2;i<MAXN;i++){
if(!isprime[i]){
prime[num_p++] = i;
isprime[i] = true;
}
for(int j = 0;j<num_p && i*prime[j]<MAXN;j++){
isprime[i*prime[j]] = true;
if(i%prime[j]==0)break;
}
}
memset(p,0,sizeof(p));
for(int i = 0;i<num_p;i++)p[prime[i]] = 1;
}
int main(){
makeprime();
int c = 0;
for(int i = 6;i<MAXN;i+=2){
if(p[i-3]!=1 && p[i-5]!=1){
}else {
for(int j = 3;prime[j]<=i/2;j++)if(p[prime[j]] && p[i-prime[j]]){
c++;
break;
}
}
}
cout <<c<<endl;
getchar();
getchar();
getchar();
getchar();
return 0;
}
发现1000000左右大概有14万需要遍历。。
- 给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
- 给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数
- 百度笔试算法题:算法题:给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
- 算法题:给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
- 算法题:给你一个自然数N,求[6, N]之内的所有素数中, 两两之和为偶数的那些偶数。
- 给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数(百度2014,面试)
- [经典面试题]给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数
- [6,n]中的素数之和为偶数的打印出来
- 输入一个偶数N,输出所有素数对之和等于N的素数对
- 小于N的自然数为偶数的和----bitwise
- 求素数,给你一个n,输出n以内的素数
- 假设一个数组A[n]数据均为整形,设计一个O(n)的算法,实现将所有奇数放在数组左侧,所有偶数放在右侧
- 算法题29 从一个取值范围为1~N的不重复数列中找出所有满足两数和为N+1的数对
- 算法题29 从一个取值范围为1~N的不重复数列中找出所有满足两数和为N+1的数对
- LightOJ 1336 Sigma Function(1--n中所有因子和为偶数的数字个数)
- 一个偶数总能表示为两个素数之和。要求:输入一个偶数,将其表示成两个素数之和,直到输入的数为0。
- 键入一个自然数 ,求这个自然数的所有约数之和
- 验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。请输入一个偶数,将其表示成两个素数之和。
- XML解析技术研究
- 北京地名由来
- 移动开发小结
- iPhone UITableView(利用UITableView实现平滑的九宫格效果)
- 未来一年学习计划(2013.10.14)
- 算法题:给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
- 三种处理缓存失效的策略
- DDR内存时序指南
- 查找二叉树转换为排序的双向链表
- python装饰器闭包学习
- Android的设置界面及Preference使用
- 画鼠标和触摸屏光标流程
- Quartz学习
- 在做app应用的时候,需要将数据提交到服务器去存储,那么方法可以参考如下