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
 分析:
偶數可以對半開,所以外面只需要判斷偶數的一半有多少種拆分方法就可以了
因為后面的一半和前面的一半是重復的
比如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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM