hdu2098 分拆素數和

2021-08-26 12:20:09 字數 770 閱讀 7823

對於這道題目需要掌握的就是如何高效的求小於整數n的素數有多少個,然後通過有技巧的遍歷就可以很輕鬆的得到正確答案:

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn=1e4+5;

int prime[maxn];

int num=0;

void primes(int n)

for(int j=0;jif(prime[j]>v[i]||prime[j]>n/i) break;

v[i*prime[j]]=prime[j];}}

}int main()

else

if((prime[i]+prime[j])>n)

else

if((prime[i]+prime[j])1;

break;}}

}cout

<2

0;}

分析:

我採用的是線性求解小於等於n 的素數個數的方法,複雜度是o(n)級別的,通過篩查,得到了乙個素數數列,其實已經就是從小到大排序的了。這裡有兩個指標:i,j。

然後從最小的開始和最大的相加,倘若相等也就意味著可以i+1,j-1;倘若小於n,說明對於i來說j指向還不夠大,所以i+1,j不變;倘若大於n,說明對於i來說,j指向有點大,可以continue,使j- -;

分拆素數和 HDU 2098

problem 把乙個偶數拆成兩個不同素數的和,有幾種拆法呢?input 輸入包含一些正的偶數,其值不會超過10000,個數不會超過500,若遇0,則結束。output 對應每個偶數,輸出其拆成不同素數的個數,每個結果佔一行。sample input 30 26 0sample output3 2 ...

分拆素數和 HDU2098

link problem description 把乙個偶數拆成兩個不同素數的和,有幾種拆法呢?input 輸入包含一些正的偶數,其值不會超過10000,個數不會超過500,若遇0,則結束。output 對應每個偶數,輸出其拆成不同素數的個數,每個結果佔一行。sample input 30 26 0...

分拆素數和 HDU 2098

把乙個偶數拆成兩個不同素數的和,有幾種拆法呢?input 輸入包含一些正的偶數,其值不會超過10000,個數不會超過500,若遇0,則結束。output 對應每個偶數,輸出其拆成不同素數的個數,每個結果佔一行。sample input 30 260sample output3 2 題解 先寫乙個函式...