openjudge函数练习

04:验证歌德巴赫猜想

描述
验证“歌德巴赫猜想”,即:任意一个大于2的偶数均可表示成两个素数之和。

输入
输入只有一个正整数x。(x是偶数,x <= 2000 且 x > 2)
输出
输出这个数的所有分解形式,形式为:
x = y + z
其中x为待验证的数,y和z满足y + z = x,而且 y <= z,y和z均是素数。
如果存在多组分解形式,则按照y的升序输出所有的分解,每行一个分解表达式。

注意数和符号之间隔一个空格。
样例输入
输入样例1:
10

输入样例2:
100
样例输出输出样例1:
10 = 3 + 7
10 = 5 + 5

输出样例2:
100 = 3 + 97
100 = 11 + 89
100 = 17 + 83
100 = 29 + 71
100 = 41 + 59
100 = 47 + 53
执行代码

#include <iostream>

using namespace std;
bool su(int i){
    int sum=0;
    for(int k=2;k<i;k++)//i=5
       if(i%k==0)
       sum++;
    if(sum!=0)
        return false;
    else return true;
}
int main()
{ int n;
cin>>n;
const int N=n/2;
int a[N];
int m=0;
for(int i=2;i<n;i=i+1){
        if(i%2==0&&i/2>1)//去除大于二的偶数
        continue;
     else if(su(i)){
        a[m]=i;
        m++;
    }
}//把(1,n)的所有质数存入数组;假如输入9 则数组a[]中;10~2 3 5 7 9
//for(int i=0;i<m;i++)
    //cout<<a[i];
for(int i=0;i<m-1;i++)
    for(int j=i;j<m;j++)
    if(n==a[i]+a[j])
    cout<<n<<" "<<"="<<" "<<a[i]<<" "<<"+"<<" "<<a[j]<<endl;
    return 0;}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值