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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 2204 Eddy's爱好(容斥原理)

發布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 2204 Eddy's爱好(容斥原理) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2204

解題報告:輸入一個n讓你求出[1,n]范圍內有多少個數可以表示成形如m^k的樣子。

不詳細說了,自己一開始也忽略了三個素數的乘積的乘方的情況。

1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 typedef long long INT; 8 INT prim[70]; 9 10 int dabiao() 11 { 12 int f = 0; 13 for(int i = 2;i < 60;++i) 14 { 15 int flag = 1; 16 17 for(int j = 2;j < i;++j) 18 if(i % j == 0) 19 { 20 flag = 0; 21 break; 22 } 23 if(flag) prim[f++] = i; 24 } 25 return f; 26 } 27 28 int calc(INT a,INT b,INT n) 29 { 30 INT s = 1; 31 while(b--) 32 { 33 if((INT)(n / a) <= s) return 0; 34 s *= a; 35 } 36 return 1; 37 } 38 int main() 39 { 40 INT n; 41 int num = dabiao(); 42 while(scanf("%I64d",&n)!=EOF) 43 { 44 INT tot = 1; 45 for(int i = 0;i < num;++i) 46 { 47 INT temp = (INT)pow((double)n,1.0 / prim[i]); 48 if(temp == 1 ) break; //開方之后不足1的話,則退出 49 tot += temp - 1; //減1是因為每次都會統計到1 50 } 51 for(int i = 0;i < num;++i) 52 for(int j = i+1;j < num;++j) 53 { 54 INT temp = pow((double)n,1.0/(prim[i] * prim[j])); 55 if(temp == 1) break; 56 tot -= temp - 1; 57 } 58 for(int i = 0;i < num;++i) 59 for(int j = i + 1;j < num;++j) 60 for(int k = j + 1;k < num;++k) 61 { 62 INT temp = pow((double)n,1.0/(prim[i] * prim[j] * prim[k])); 63 if(temp == 1) break; 64 tot += temp - 1; 65 } 66 printf("%I64d\n",tot); 67 } 68 return 0; 69 } View Code

?

轉載于:https://www.cnblogs.com/xiaxiaosheng/p/3870300.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的HDU 2204 Eddy's爱好(容斥原理)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。