分拆素数和
2016-04-24 17:43
162 查看
Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
代码:
素数打表法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 10000
int z=0;
int flag[10000];
int prime[10000];
void get_prime()
{
memset(flag,1,sizeof(flag));
int i,j;
for(i=2; i<=max; i++)
{
if(flag[i])
{
prime[z++]=i;
for(j=i*i; j<=max; j+=i)
flag[j]=0;
}
}
}
int main()
{
int n,i,j,ans;
get_prime();
while(scanf("%d",&n),n)
{
ans=0;
for(i=0; prime[i]<n/2; i++)
{
for(j=i+1; prime[j]<n; j++)
{
if(i!=j)
{
if(prime[i]+prime[j]==n)
{
ans++;
}
}
}
}
printf("%d\n",ans);
}
return 0;
}
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
代码:
素数打表法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 10000
int z=0;
int flag[10000];
int prime[10000];
void get_prime()
{
memset(flag,1,sizeof(flag));
int i,j;
for(i=2; i<=max; i++)
{
if(flag[i])
{
prime[z++]=i;
for(j=i*i; j<=max; j+=i)
flag[j]=0;
}
}
}
int main()
{
int n,i,j,ans;
get_prime();
while(scanf("%d",&n),n)
{
ans=0;
for(i=0; prime[i]<n/2; i++)
{
for(j=i+1; prime[j]<n; j++)
{
if(i!=j)
{
if(prime[i]+prime[j]==n)
{
ans++;
}
}
}
}
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- Android 开源项目代码分析思路
- 设计模式之外观模式 Facade
- React Native 开发(第一篇)
- 作业
- 对搜狗输入法的用户体验
- matplotlib.pyplot中add_subplot方法参数111的含义
- 1018 Tempter of the Bone
- snmpset批量修改交换机名称
- Image Loader的初步尝试
- Python Scrapy 学习----自动爬取网页
- Mybatis最入门---大文本存储
- 上海科目二经验总结
- [UIPasteboard generalPasteboard]剪贴板的使用
- zkw费用流
- k近邻算法(KNN)及kd树简介(KD-Tree)
- Spring官网下载dist.zip的几种方法
- 20145315 《Java程序设计》实验三实验报告
- 用户注册,重复用户名时的处理
- Docker数据管理(四)
- list.append()