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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

欧拉函数 cojs 2181. 打表

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 欧拉函数 cojs 2181. 打表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

cojs 2181. 打表

★☆?? 輸入文件:sendtable.in?? 輸出文件:sendtable.out???簡單對比
時間限制:1 s?? 內存限制:256 MB

【題目描述】

?

有一道比賽題目,輸入兩個整數x,y(1≤x,y≤n),輸出某個函數f(x,y)。有位選手想打表(即事先計算出所有的f(x,y),寫在源代碼里),但是表太大了,原代碼超過了比賽的限制,需要精簡。

好在那道題目有一個性質,使得很容易根據f(x,y)算出f(x*k,y*k)(其中k是正整數),這樣有一些f(x,y)就不需要存在表里了。

輸入n(n≤50000),你的任務是統計最簡的表里有多少個元素。例如,n=2時有3個(1,1),(1,2),(2,1)。

?

【輸入格式】

輸入只有一行,一個整數n;

【輸出格式】

輸出也僅有一行,即表里元素的個數。

【樣例輸入】

2

【樣例輸出】

3 1 /*題目的要求可以這樣理解,假設x<y求出小于y的所有與y互質的數的個數,這就是歐拉函數的定義了,然后因為x,y可以互換,所以最終的結果就是 2 小于等于n,大于等于2的所有的數的歐拉函數*2+1(+1是因為有(1,1)這個情況) 3 */ 4 #define N 50011 5 #include<iostream> 6 using namespace std; 7 #include<cstdio> 8 int phi[N+10]={0}; 9 int n; 10 void get_phi()/*定義法求歐拉函數*/ 11 { 12 phi[1]=1; 13 for(int i=2;i<=N;++i) 14 { 15 if(!phi[i]) 16 { 17 for(int j=i;j<=N;j+=i) 18 { 19 if(!phi[j]) 20 phi[j]=j; 21 phi[j]=phi[j]/i*(i-1);/*注意這里一定要先除后乘,因為它的定義中就是這樣先進行除法,再進行減法*/ 22 } 23 } 24 } 25 } 26 int main() 27 { 28 freopen("sendtable.in","r",stdin); 29 freopen("sendtable.out","w",stdout); 30 get_phi(); 31 scanf("%d",&n); 32 long long ans=0; 33 for(int i=2;i<=n;++i) 34 ans+=phi[i]; 35 cout<<(ans*2+1)<<endl; 36 fclose(stdin);fclose(stdout); 37 return 0; 38 }

?

轉載于:https://www.cnblogs.com/c1299401227/p/5553061.html

總結

以上是生活随笔為你收集整理的欧拉函数 cojs 2181. 打表的全部內容,希望文章能夠幫你解決所遇到的問題。

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