日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu-2204(容斥原理)

發(fā)布時間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu-2204(容斥原理) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Eddy's愛好

Time Limit: 3000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2901????Accepted Submission(s): 1416


?

Problem Description

Ignatius 喜歡收集蝴蝶標本和郵票,但是Eddy的愛好很特別,他對數(shù)字比較感興趣,他曾經(jīng)一度沉迷于素數(shù),而現(xiàn)在他對于一些新的特殊數(shù)比較有興趣。
這些特殊數(shù)是這樣的:這些數(shù)都能表示成M^K,M和K是正整數(shù)且K>1。
正當(dāng)他再度沉迷的時候,他發(fā)現(xiàn)不知道什么時候才能知道這樣的數(shù)字的數(shù)量,因此他又求助于你這位聰明的程序員,請你幫他用程序解決這個問題。
為了簡化,問題是這樣的:給你一個正整數(shù)N,確定在1到N之間有多少個可以表示成M^K(K>1)的數(shù)。

?

?

Input

本題有多組測試數(shù)據(jù),每組包含一個整數(shù)N,1<=N<=1000000000000000000(10^18).

?

?

Output

對于每組輸入,請輸出在在1到N之間形式如M^K的數(shù)的總數(shù)。
每組輸出占一行。

?

?

Sample Input

?

10

36

1000000000000000000

?

?

Sample Output

?

4

9

1001003332

大概題意是要你輸出1到n中,能夠表示成a^b的數(shù),a,b都是大于0的整數(shù)的個數(shù),
其中b大于1。
因為1到n中,能夠完全開平方的個數(shù)就是(n^0.5)的整數(shù)部分,以此類推可以得到,完全開立方,完全開四次方各種的次數(shù)。這樣的話,要枚舉的數(shù)量太大,有什么辦法可以讓枚舉的數(shù)量減少呢?有的,由于任意一個大于1的整數(shù)都可以表示成兩個素的乘積,于是,能夠完全開平方的個數(shù)包括了能夠完全開四次方,八次方,十六次方以此類推的個數(shù)。于是,可以知道,只需要枚舉能夠完全開素數(shù)次方的個數(shù)即可。又因為n最大不會超過10^18,由于64位整型號能夠表示的最大數(shù)大概就是9*10^18多,所以不需要特地寫個大數(shù)。又因為這樣,所以素數(shù)只需要枚舉到大小不超過63即可,因為2^63-1就是64位整型的最大值,所以這個n最大,開個63次方的整數(shù)部分結(jié)果肯定為1,為1的話就代表能夠1到n中能夠完全開這個次方的數(shù)只有1個,又因為1能夠開任意次方,所以,這個數(shù)肯定是1啦,于是超過63的素數(shù)沒必要枚舉了,因為只有1能夠開這么多次方。對于一個數(shù)n,從小到大枚舉到使n開次方為1即可,再把前面所有開次方的結(jié)果都累加,再除去之中重復(fù)的部分,最終結(jié)果就是題意所要求的個數(shù)。

重復(fù)的部分是說,能夠完全開六次方的肯定也能夠完全開二次方和三次方,這個能完全開六次方的個數(shù)被重復(fù)加了一次,所以要減去一次,以此類推把所有重復(fù)的部分除去即可。

還有一點,這個題目,有的人用long long讀入n的時候,會wa,這個的話,是各種編譯器的原因,用cin讀入就好了,至于有的人說缺失精度什么的,只是想多了。

#include<iostream> #include<cmath> using namespace std; int prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61}; void result(long long x) {int i,j,k;long long tmp,ans=1;for(i=0;;i++){tmp=(long long)(pow(x,1.0/prime[i]));if(tmp<2)break;ans+=tmp-1;for(j=i+1;;j++){tmp=(long long)(pow(x,1.0/(prime[i]*prime[j])));if(tmp<2)break;ans-=tmp-1;for(k=j+1;;k++){tmp=(long long)(pow(x,1.0/(prime[i]*prime[j]*prime[k])));if(tmp<2)break;ans+=tmp-1;}}}printf("%lld\n",ans); } int main() {long long x;while(cin>>x)result(x); }

?

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的hdu-2204(容斥原理)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。