hdu 2098 素数打表
来源:互联网 发布:微博用户数据 编辑:程序博客网 时间:2024/06/07 02:09
http://acm.hdu.edu.cn/showproblem.php?pid=2098
分拆素数和
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 33980 Accepted Submission(s): 14796
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30260
Sample Output
32
素数打表优化:
1、素数打表头一个循环可以用sqrt(n)减少次数,
2、第二个循环可以加一个条件,if ( !prime[i] ) , 如果prime[i]是true的话,刚才已经执行过了,可以直接忽略;
#include <iostream>#include <cstring>#include <cstdio>#include <string>#include <algorithm>using namespace std;const int maxn = 1e4 + 5;bool prime[maxn];//素数是0/*void isprime(){prime[0] = prime[1] = 1;for (int i = 2; i < sqrt(maxn); i++){for (int j = i + i; j < maxn; j += i){prime[j] = 1;}}}*///优化了一下素数打表void isprime(){prime[0] = prime[1] = 1;for (int i = 2; i < sqrt(maxn); i++){if (!prime[i])for (int j = i + i; j < maxn; j += i)prime[j] = 1;}}int main(){int n;memset(prime, 0, sizeof(prime));isprime();while (scanf("%d", &n) != EOF &&n){int cnt = 0;for (int i = 2; i < n/2; i++){if (!prime[i] && !prime[n - i]){cnt++;}}printf("%d\n", cnt);}//system("pause");return 0;}
0 0
- hdu 2098 素数打表
- hdu 4715 素数打表
- hdu 4548 素数打表
- hdu 1286 素数打表
- hdu 2136 素数打表
- HDU 2012 素数打表
- HDU 4548 美素数【素数打表】
- hdu 1431 回文素数 打表
- HDU 1431 素数回文 打表
- hdu 1431 素数回文 (打表)
- HDU 2161 Primes(素数打表)
- HDU 1973 BFS+素数打表
- HDU 2012 - 素数判定 ( 打表 )
- hdu 4548(素数打表)
- HDU 2521 反素数【打表】
- 美素数(hdu 4548)打表
- hdu 1431 素数回文(打表)
- hdu 2161 Primes 素数打表
- Penetration testing checklist based on OWASP Top 10 Mobile
- 链表反转算法
- eclipse查看jar包源代码乱码问题解决
- 大数据系列修炼-Scala课程68
- C++学习笔记--对象创建
- hdu 2098 素数打表
- Android 微信分享与QQ分享功能
- 代理模式
- sizeof与strlen用法详解(结构体对齐)
- 【C/C++】BOOST 线程完全攻略 - 基础篇
- socket编程接口介绍
- 原型模式(Prototype)
- 杭电ACM2001题-------C语言
- 读书笔记-推荐系统实战:第一章