zoukankan      html  css  js  c++  java
  • hdu 2098 分拆素数和(一个偶数拆分成两个不同素数和 拆法数量)

    Problem Description
    把一个偶数拆成两个不同素数的和,有几种拆法呢?
     
     

    Input
    输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
     
     

    Output
    对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
     
     

    Sample Input
    30 26 0
     
     

    Sample Output
    3 2
     
     

    Source
     分析:
    偶数可以对半开,所以外面只需要判断偶数的一半有多少种拆分方法就可以了
    因为后面的一半和前面的一半是重复的
    比如30拆分:13和17 17和13
    是同一个拆分
    注意特殊情况
    26
    26/2=13
    13是素数
    所以计算变量需要减1

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int f(int x)//判断素数
    {
        if(x==1)
            return 0;
        for(int i=2;i<=sqrt(x);i++)
        {
            if(x%i==0)
                return 0;
        }
        return 1;
    }
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            if(n==0)
                break;
            n=n/2;//偶数对半开
            int c=0;
            for(int i=2;i<=n;i++)//一个数
            {
                int j=2*n-i;//另一个数 二者之间是和的关系
                if(f(i)==1&&f(j)==1)
                {
                    c++;//都是素数计算器加一
                }
            }
            if(f(n)==1)//特殊情况 比如 13 13
                c--;
            printf("%d
    ",c);
        }
        return 0;
    }
    

      

  • 相关阅读:
    51 Nod 1068 Bash游戏v3
    51 Nod Bash 游戏v2
    51 Nod 1073 约瑟夫环
    UVA 12063 Zeros and ones 一道需要好好体会的好题
    51 Nod 1161 Partial sums
    2018中国大学生程序设计竞赛
    UVA 11971 Polygon
    UVA 10900 So do you want to be a 2^n-aire?
    UVA 11346 Possibility
    python with as 的用法
  • 原文地址:https://www.cnblogs.com/clb123/p/12328065.html
Copyright © 2011-2022 走看看