HDU2098_分拆素数和
来源:互联网 发布:太原java培训机构 编辑:程序博客网 时间:2024/06/05 01:19
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768K (Java/Others)
Total Submission(s): 39746 Accepted Submission(s): 17390
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
Source
2007省赛集训队练习赛(2)
思路:
首先用Eratosthenes筛选法求得必要的素数,然后用试探法求可分解的个数,对于输入的偶数sum而言,如果能够分解成两个素数之和,其中一个必然小于或等于sum/2,基于这个原理进行分解计数,最后求出所有的组合
C语言代码:
#include<stdio.h>#include<stdbool.h>//bool定义所需头文件 #define max 10000int arr[max+1];void Erat(int arr[max],int n){ int i,j; bool flag1=true; bool flag2=false; arr[1]=flag2; for(i=2;i<=n;i++) { arr[i]=flag1; } for(i=2;i<=n;i++) { if(arr[i]==flag1) { for(j=i*i;j<=n;j+=i) { arr[j]=flag2; } } }} int main(){ int i,sum,count; Erat(arr,max); while(scanf("%d",&sum)&&sum) { count=0; for(i=0;i<sum/2;i++) { if(arr[i]&&arr[sum-i]) if(i!=sum-i) count++; } printf("%d\n",count); } return 0;}
阅读全文
0 0
- HDU2098_分拆素数和
- 【分拆素数和】
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 分拆素数和
- 使用ViewDragHelp实现ImageView拖动超过屏幕1/2回到屏幕左边,否则到右边,还有一个就是还能实现点击的效果
- UE4中的世界光照如何设置?
- day03之判断链表带环以及求环的长度及环的入口点+一个类不能被继承及只能分别在栈堆上创建对象
- 0716 POJ1222 EXTENDED LIGHTS OUT
- Java WebService简单实例
- HDU2098_分拆素数和
- SolidWorks参数化设计中Excel的应用
- Android沉浸式状态栏
- myEclipse2017添加tomcat服务器
- LeetCode--Container With Most Water
- Linux 3.10 ARM Device Tree 的初始化
- Android笔记(8)隐藏标题栏
- 使用BeautifulSoup解析网页时漏掉了元素
- Ubuntu16.04+Anaconda 4.4.0(Python 2.7.13)+Keras环境搭建