problem description
input
本題有多組測試資料,每組包含乙個整數n,1<=n<=1000000000000000000(10^18).
output
對於每組輸入,請輸出在在1到n之間形式如m^k的數的總數。
每組輸出佔一行。
sample input
10 36 1000000000000000000
sample output
4 9 10010033
as we konw ,1~n中能整開k次方的數有個,
而要求1~n中所有能夠被整開的數有幾個,那就是 pow(n,1.0/2)+ pow(n,1.0/3)+······
這樣看來,有很多被重複計算了,比如能開4次方、6次方、8次方的一定能開2次方
所以,我們第一次計算開k次方的時候,就要去除所有能k的倍數次方的
而這就恰是素數的性質,由於資料在long long(2^63-1)的範圍,所以只需算出前63個素數就行,
但是,萬一素數與素數之間重複計算了怎麼辦,那就需要用到容斥原理了,加上奇數個減去偶數個
只需要統計三個素數相乘的冪就行了,因為四個會超出範圍
#include#define lom long long
using namespace std;
int p=;
int main()}}
cout<
}return 0;
} /*
膜膜膜 膜 膜 膜 膜 膜
膜 膜膜膜膜膜膜膜膜 膜 膜 膜
膜 膜 膜 膜 膜 膜膜膜膜 膜膜膜膜膜膜
膜膜膜 膜膜膜膜膜 膜 膜 膜 膜 膜
膜 膜 膜 膜 膜膜膜膜膜膜膜膜膜膜膜 膜 膜 膜 膜
膜 膜 膜膜膜膜膜 膜 膜膜 膜膜膜膜膜膜
膜膜膜 膜 膜 膜 膜 膜膜 膜膜 膜 膜
膜 膜 膜膜膜膜膜 膜 膜 膜 膜 膜 膜 膜
膜 膜 膜 膜 膜 膜 膜膜膜膜膜膜
膜 膜膜膜膜膜膜膜膜 膜 膜 膜 膜 膜 膜
膜 膜 膜 膜 膜 膜 膜 膜
膜 膜膜 膜 膜膜 膜膜 膜膜 膜 膜
*/
hdu 2204 Eddy s愛好 容斥
根據指數的質數分解進行容斥 比如 k a 3 且 k b 5,那麼 k c 15 所以 a 的可選個數 加 b的可選個數減去c的可減個數就是總的個數了因為 a 3和b 5有重複的 include include include include include include define ll lo...
HDU 2204 Eddy s愛好 容斥
ignatius 喜歡收集蝴蝶標本和郵票,但是eddy的愛好很特別,他對數字比較感興趣,他曾經一度沉迷於素數,而現在他對於一些新的特殊數比較有興趣。這些特殊數是這樣的 這些數都能表示成m k,m和k是正整數且k 1。正當他再度沉迷的時候,他發現不知道什麼時候才能知道這樣的數字的數量,因此他又求助於你...
HDU 2204 Eddy s愛好 容斥
input 本題有多組測試資料,每組包含乙個整數n,1 n 1000000000000000000 10 18 output 對於每組輸入,請輸出在在1到n之間形式如m k的數的總數。每組輸出佔一行。sample input 10 361000000000000000000sample output...