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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

bzoj 2705: [SDOI2012]Longge的问题——欧拉定理

發布時間:2024/9/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj 2705: [SDOI2012]Longge的问题——欧拉定理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

Longge的數學成績非常好,并且他非常樂于挑戰高難度的數學問題。現在問題來了:給定一個整數N,你需要求出∑gcd(i, N)(1<=i <=N)。

Input

一個整數,為N。

Output

一個整數,為所求的答案。

Sample Input

6

Sample Output

15

HINT

?

【數據范圍】

對于60%的數據,0<N<=2^16。

對于100%的數據,0<N<=2^32。

———————————————————————

這道題如果一個數x gcd(n,x)==y 那么gcd(b/y,x/y)==1

所以我們枚舉因數d 求一下1-n/d有多少個數和n/d的gcd為1 這個可以用歐拉函數

#include<cstdio> #include<cstring> #include<algorithm> #define LL long long const int M=1e3+7; LL read(){LL ans=0,f=1,c=getchar();while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}return ans*f; } LL n,v,ans; int p[M],cnt; LL f(LL x){for(int i=1;i<=cnt;i++)if(x%p[i]==0) x=x/p[i]*(p[i]-1); return x;} int main(){n=read(); v=n;for(LL x=2;x*x<=v;x++)if(v%x==0){p[++cnt]=x;while(v%x==0) v/=x;}if(v!=1) p[++cnt]=v;for(LL x=1;x*x<=n;x++)if(n%x==0){LL y=n/x;ans=ans+y*f(x);if(x!=y) ans=ans+x*f(y);}printf("%lld\n",ans);return 0; } View Code

?

轉載于:https://www.cnblogs.com/lyzuikeai/p/7664991.html

總結

以上是生活随笔為你收集整理的bzoj 2705: [SDOI2012]Longge的问题——欧拉定理的全部內容,希望文章能夠幫你解決所遇到的問題。

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