HDU 2204 Eddy s愛好 (容斥原理)

2022-05-19 20:48:10 字數 925 閱讀 8355

給出乙個數n,問1-n中有多少個數可以表示為m^k,m,k均為正整數且k>1

(1<=n<=1^18)

(一開始^以為是異或懵逼了好久....)

額,顯然1這個數比較討厭1的多少次方都得1,對答案的貢獻為1,最後加上就可以了。

然後,我們發現x^4=(x^2)^2四次方可以用平方的平方代替,我們只列舉質數次方,然後用n(1/x)等於x次方在n之內的數的個數(這個東西會有精度問題)。

就可以求出質數次方在1到n之內的數有多少。但是,發現(x^2)^3==(x^3)^2,(x^2)^3(或者說(x^3)^2)被算了兩次。

這時,就用到容斥原理了。因為2^60>1e18所以質數次方考慮到59,又因為2*3*5*7=210>60,所以容斥時容斥到三個數就行了。

(容斥原理居然是小學奧數4大定理之一)

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7long

long prime[20]=;

8long

long

n,ans;

9void dfs(long

long now,long

long num,long

long res,long

long

k)18

return;19

}20if(now>17)return;21

if(num*prime[now]<60)dfs(now+1,num*prime[now],res-1

,k);

22 dfs(now+1

,num,res,k);23}

24int

main()

30return0;

31 }

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...