hdu 2098 分拆素数和(一个偶数拆分成两个不同素数和 拆法数量)

传送门:

http://acm.hdu.edu.cn/showproblem.php?pid=2098

分拆素数和

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 46434    Accepted Submission(s): 20210

Problem Description

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

Input

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

Output

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

Sample Input

30
26
0

Sample Output

3
2

Source

2007省赛集训队练习赛(2)

分析:

偶数可以对半开,所以外面只需要判断偶数的一半有多少种拆分方法就可以了

因为后面的一半和前面的一半是重复的

比如30拆分:13和17 17和13

是同一个拆分

注意特殊情况

26

26/2=13

13是素数

所以计算变量需要减1

code:

#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\n",c);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/yinbiao/p/9311865.html

时间: 2024-10-13 06:35:38

hdu 2098 分拆素数和(一个偶数拆分成两个不同素数和 拆法数量)的相关文章

HDU 2098 分拆素数和

Problem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束. Output 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行. Sample Input 30 26 0 Sample Output 3 2 先打素数表,再一个一个判断,水 不知道为啥,编译错误 #include <cstdio> #include <iostream> #include &l

HDU 2098 分拆素数和 数论

分拆素数和 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束. Output 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行. Sample Input 30 26 0 Sample Output 3 2 关键是做一下预处

HDU 2098 分拆素数和(素数)

http://acm.hdu.edu.cn/showproblem.php?pid=2098 题意: 给你一个偶数,问你这个偶数有多少种方式能由两个不同的素数构成? 分析: 首先求出10000以内的所有素数. 如果这个偶数X能有两个不同的素数构成,那么一定一个小于(X/2-1). 只要从小到大枚举这个比较小的素数a,然后看看X-b是否是素数即可得到一种组合方式. 依次统计所有组合方式即可. AC代码: #include<cstdio> #include<algorithm> #in

百度之星—一个整数拆分成连续的正整数之和的个人解决方法

题目描述:一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列. 为了解决这个问题,我声明了一个类用来实现.具体声明如下所示: class CNumber { private: int split_number; int result_number; //用来保存拆分的序列的个数. public: void set_number(int split

word文档一个表格分割成两个表格

按住键盘上的ctrl+shift+enter即可快速实现分割表格效果. 原文地址:https://www.cnblogs.com/stujike/p/9066701.html

杭电 HDU ACM 2098 分拆素数和

分拆素数和 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 24661    Accepted Submission(s): 10741 Problem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束. Output 对

分拆素数和 HDU - 2098

把一个偶数拆成两个不同素数的和,有几种拆法呢? Input输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束.Output对应每个偶数,输出其拆成不同素数的个数,每个结果占一行.Sample Input 30 26 0 Sample Output 3 2 一道很水的题,自己做了一下感觉步骤有点麻烦但是上网搜了一下,发现我的居然比网上有些做法简单....拿出来晒一下,大神飘过~~~~ #include<iostream> #include<cstdio>

C - 分拆素数和 (HDU - 2098)

- 题目大意 正如题目一样,就是将一个正偶数拆分成素数(记录拆分的素数个数就行,不用写出是那些素数). - 解题思路 去枚举每个数是否能被输入的数字整除,如果能就不行,反之记录即可. - 代码 #include<iostream> #include<cmath> using namespace std; int cf(int n) { int r, i; if (n <= 1) return 0; for (i = 2; i <= int(sqrt(int(n)));

hdoj 2098 分拆素数和

分拆素数和 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 25673    Accepted Submission(s): 11239 Problem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束. Output 对应