hdu 2098 分拆素数和
来源:互联网 发布:网络赌托该不该举报 编辑:程序博客网 时间:2024/06/06 15:40
本题链接:点击打开链接
分拆素数和
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 38816 Accepted Submission(s): 16977
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30260
Sample Output
32
Source
2007省赛集训队练习赛(2)
Recommend
lcy | We have carefully selected several similar problems for you: 2084 2093 2138 2094 2076
解题思路:这题不难,闲来无事敲着玩玩,只是可能费时比较高,我以前做的用了300多ms,当时还做了好久才搞懂,现在再用打表的方法做了一下就0ms了。
以前的代码:
#include <stdio.h>#include<math.h>int sushu(int t){ int j; for(j=2;j<=sqrt(t);j++) if(t%j==0) return 0; return 1;}int main(){ int t,a,b,k,i; while(~scanf("%d",&t)&&t) { k=0; for(i=3;i<t-i;i+=2) { a=sushu (t-i); b=sushu (i); if(a&&b) k++; } printf("%d\n",k); } return 0;}
现在的代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=10000+10;bool a[maxn];void sushu(){ memset(a,true,sizeof(a)); for(int i=2; i<maxn; i++) { if(a[i]) for(int j=i+i; j<maxn; j+=i) { a[j]=false; } }}int main(){ int n; sushu(); while(~scanf("%d",&n)&&n) { int c=0; for(int i=2; i<n-i; i++) { if(a[i]&&a[n-i]) c++; } printf("%d\n",c); } return 0;}
反正大家看看就好,水题就不啰嗦了,代码相信大家都懂。
0 0
- HDU 2098 分拆素数和(素数)
- HDU 2098 分拆素数和
- HDU 2098 分拆素数和
- HDU 2098 - 分拆素数和
- HDU 2098 分拆素数和
- hdu 2098 分拆素数和
- Hdu 2098 分拆素数和
- HDU 2098 分拆素数和
- HDU 2098 分拆素数和
- hdu-2098-分拆素数和。。。
- HDU 2098 分拆素数和
- HDU 2098 分拆素数和
- hdu 2098 分拆素数和
- hdu 2098 分拆素数和 水题
- HDU 2098 分拆素数和
- hdu 2098 分拆素数和
- hdu 2098 分拆素数和
- HDU 2098 分拆素数和
- Qt: qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写
- Java迭代 : Iterator和Iterable接口
- android基础学习2————Activity入门
- 机器学习——深度学习(Deep Learning)
- 初识FreeMarker
- hdu 2098 分拆素数和
- Python assert 用法
- 机试指南
- php面试题汇总二(基础篇附答案)
- 字典压缩编码器
- 无监督特征学习——Unsupervised feature learning and deep learning
- OpenGL ES 介绍
- C++远征之封装篇——对象数组,对象成员
- Linux中设置服务自启动的三种方式