xt 1140 Anti-Goldbach's Conjecture
来源:互联网 发布:怎样查看网卡mac地址 编辑:程序博客网 时间:2024/05/17 05:52
哥德巴赫猜想:
任一大于2的偶数,都可表示成两个素数之和。
是世界上最著名的未解问题之一,但是下面的反哥德巴赫猜想:
任一大于11的奇数,都可表示成两个合数之和。
确很容易证明。
定义反哥德巴赫分拆数g(n)表示将大于11的奇数n分解为两个合数之和的方案数。再定义sg(n)=sum({g(i) | i ≤ n}),即所有不大于n的奇数的反哥德巴赫分拆数之和。你的任务就是快速的计算给定n所对应的sg(n)。
Input
有大约100组测试数据。每组测试数据占一行,包含唯一的一个正整数13 ≤ n ≤ 1000000。输入以EOF结束。
Output
对于输入n,输出对应的sg(n)。
Sample Input
13
14
15
Sample Output
1
1
2
求g[i]只要枚举小于i-2的奇合数(2为偶素数)就可以了
o(n log n)树状数组解法
#include <stdio.h>#define N 1000001#define lowbit(i) i&(-i)__int64 pri[N] = {0};__int64 sg[N]= {0},a[N] = {0};void add(__int64 i){ for(;i < N; i += lowbit(i)) a[i] ++;}__int64 sum(__int64 i){ __int64 s= 0; for(;i > 0; i -= lowbit(i)) s += a[i]; return s;}void p(){ __int64 i,j; for(i = 2;i <= 1000; ++i) if(!pri[i]) { for(j = i;j * i <N;++j) pri[j*i] = 1; } for(i = 9; i < N; i += 2) { if(pri[i] && (i&1)) add(i); }}void cal_s(){ sg[11] = 0; for(__int64 i = 13; i < N; i += 2) sg[i] = sum(i - 3); for(__int64 i = 13; i < N; i+=2) sg[i] += sg[i-2];}int main(){ p(); cal_s(); __int64 a; while(scanf("%I64d",&a) != EOF) { if((a&1) == 0) --a; printf("%I64d\n",sg[a]); } return 0;}
o(n)解法
#include <stdio.h>#define N 1000001int pri[N] = {0},sg[N]= {0},cnt;void p(){ int i,j; for(i = 2;i <= 1000; ++i) if(!pri[i]) { for(j = i;j * i <N;++j) pri[j*i] = 1; } for(i = 9,cnt = 0; i < N; i += 2) { if(pri[i]&&(i&1)) pri[cnt++] = i; }}void cal_s(){ sg[11] = 0; for(int i = 13,cnt = 1; i < N; i += 2) { while(i - pri[cnt] > 2) ++cnt; sg[i] = cnt; } for(int i = 13; i < N; i+=2) sg[i] += sg[i-2];}int main(){ p(); cal_s(); int a; while(scanf("%d",&a) != EOF) { if((a&1) == 0) --a; printf("%d\n",sg[a]); } return 0;}
- xt 1140 Anti-Goldbach's Conjecture
- Anti-Goldbach's Conjecture
- xtu-1140 Anti-Goldbach's Conjecture
- XTUOJ 1140 Anti-Goldbach's Conjecture(数论)
- Anti-Goldbach's Conjecture 素数打表
- 湘潭市比赛A题 Anti-Goldbach's Conjecture
- Goldbach's Conjecture
- poj2262 Goldbach's Conjecture
- Goldbach's Conjecture
- Goldbach's Conjecture
- HOJ1459 Goldbach's Conjecture
- POJ2262 Goldbach's Conjecture
- 2262 Goldbach's Conjecture
- Goldbach's Conjecture
- POJ2262:Goldbach's Conjecture
- HDU1397:Goldbach's Conjecture
- Goldbach's Conjecture
- Goldbach's Conjecture
- poj 1384 完全背包问题
- 二重循环Test
- 二重循环Test2
- Trait技术
- 新手开始玩ubuntu
- xt 1140 Anti-Goldbach's Conjecture
- GetPixel优化,速度有质提升300倍.
- 判断一个数组是否为单一完全循环数组
- STL Vector 的遍历删除
- Java JTree_6
- STL容器[28]交集、并集、差集
- Linode VPS PPTP VPN 安装配置教程
- Hibernate的HelloWorld
- Hibernate的Annotation版本的HelloWorld