POJ 2262 Goldbach's Conjecture(数论)

201 篇文章 10 订阅

Description
输入一个不小于6的合数,把它表示成两个质数的和,如果有多个,输出相差最大的一组
Input
多组输入,每组用例一个合数,以0结束输入
Output
对于每组用例,用两个相差最大的质数和来表示此合数,如果不存在,则输出Goldbach’s conjecture is wrong.
Sample Input
8
20
42
0
Sample Output
8 = 3 + 5
20 = 3 + 17
42 = 5 + 37
Solution
简单的枚举+素数判定
Code

#include<stdio.h> 
#define MAX 1000001 
int prime[MAX]={0};  
void sushu()//打表 
{ 
    int i,j; 
    for(i=2;i<MAX;i++) 
        if(!prime[i]) 
            for(j=2;i*j<MAX;j++) 
                prime[j*i]=1;
    prime[0] = prime[1] = 1;  
} 
int main() 
{ 
    int n,i; 
    sushu(); 
    while (scanf("%d",&n)==1,n)  
    { 
        for(i=3;i<=n/2;i+=2)//枚举 
            if(prime[i]==0&&prime[n-i]==0)//找到可行解 
            {
                printf("%d = %d + %d\n", n, i, n-i);//按格式输出 
                break; 
            }
        if(i>n/2)//不存在符合条件的质数 
            printf("Goldbach's conjecture is wrong.\n"); 
    } 
    return 0; 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值