1. 程式人生 > >1040(尤拉函式)

1040(尤拉函式)

【題目描述】
給出一個n,求1-n這n個數,同n的最大公約數的和。比如:n = 6
1,2,3,4,5,6 同6的最大公約數分別為1,2,3,2,1,6,加在一起 = 15

Input
1個數N(N <= 10^9)
Output
公約數之和

Input示例
6
Output示例
15

【思路】
既然是1~n與n的公約數,那麼肯定是n的因子,每一個 n 的因子所對 sum 產生的增量為:gcd(n,i)=x(x為這個因子)的個數,也就是gcd(nx,ix)=1的個數,也就是 phi(nx) 了,寫成公式就是

i=1ngcd(i,n)=i=1,i|nnphi(ni)×i
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int euler_phi(int n) {
    int m = (int)sqrt(n + 0.5);
    int ans = n;
    for (int i = 2; i <= m; ++i) {
        if (n % i == 0) {
            ans = ans / i *(i - 1
); while (n % i == 0) n /= i; } } if (n > 1) ans = ans / n *(n - 1); return ans; } int main(){ int n; scanf("%d",&n); int m=sqrt(n)+0.5; ll ans=0; for(int i=1;i<=m;++i){ if(n%i==0){ ans+=(ll)i*(ll)euler_phi(n/i); int
j=n/i; if(j!=i) ans+=(ll)j*(ll)euler_phi(n/j); } } printf("%lld\n",ans); return 0; }

相關推薦

1040函式

【題目描述】 給出一個n,求1-n這n個數,同n的最大公約數的和。比如:n = 6 1,2,3,4,5,6 同6的最大公約數分別為1,2,3,2,1,6,加在一起 = 15 Input 1個數N(N <= 10^9) Output 公約數之

51nod-1040 最大公約數之和函式

基準時間限制:1 秒 空間限制:131072 KB 分值: 80 難度:5級演算法題  收藏  關注 給出一個n,求1-n這n個數,同n的最大公約數的和。比如:n = 6 1,2,3,4,5,6 同6的最大公約數分別為1,2,3,2,1,6,加在一起 = 15

51nod 1040 最大公約數之和函式

水平較水,想不到,看的討論版 與n的公約數,肯定是n的因子 那我們列舉n的因子就好了 假設因子為x,那麼x的貢獻次數就是1-n有多少個數與n的gcd=x,即1-n/x有多少個數與n/x互質,即ph

【51NOD】 1040-最大公約數之和函式

原題連線 首先補充一個知識點,尤拉函式: 在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目(φ(1)=1)。此函式以其首名研究者尤拉命名(Euler’s totient function),它又稱為Euler’s totient f

51nod 1040 求1-n這n個數,同n的最大公約數的和函式

題目:給出一個n,求1-n這n個數,同n的最大公約數的和。比如:n = 6           1,2,3,4,5,6 同6的最大公約數分別為1,2,3,2,1,6,加在一起 = 15 思路:一個數與n的最大公約數肯定是n的因子中的一個,所以只需要列舉n的每一個因子x,然

hdu1395 2^x mod n = 1函式

2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 20133  

hdoj 1286 找新朋友 函式

找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15913 Accepted Submission(s): 8501 Pr

線性篩函式莫比烏斯函式

在這裡提供三種線性篩的講解,它們分別是:素數篩,尤拉篩和莫比烏斯篩。 ·篩法正確性的重要理論依據: 上述函式均為積性函式。積性函式的性質為:若f(x)是一個積性函式,那麼對於任意素數a,b,滿足f(ab)=f(a)*f(b) ·一些可愛的要點(有助於理解篩法原理

poj 2478 Farey Sequence函式

Farey Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13204 Accepted: 5181 Description The Farey Sequence Fn fo

hdu4556函式

把樹從中間隔開,只看前一半,然後第n行的分子分母大於n的數去掉,明顯這裡的個數是法裡數列,也就是0到1的最簡真分數的個數,而當法裡數列a[n]=k的時候,a[n+1]=a[n]+phi[n+1]=k+phi[n+1],其中phi[n+1]是n+1的尤拉函式值,這也很明顯,

HDOJ 1787 GCD Again函式

GCD Again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total

BZOJ 2818: Gcd函式

Description給定整數N,求1<=x,y<=N且Gcd(x,y)為素數的數對(x,y)有多少對.Input一個整數NOutput如題Sample Input4Sample Output4HINThint對於樣例(2,2),(2,4),(3,3),(4,2)

最大公約數之和 V2函式

【題目描述】 給出一個數N,輸出小於等於N的所有數,兩兩之間的最大公約數之和。相當於求 Ans=∑i=1i<n∑j=i+1j<ngcd(i,j)Ans=∑i=1i<n∑j=i+1j<ngcd(i,j) Input 第1行:1個數

hdu3501函式

Calculation 2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5342    Accepted S

hdu2588 GCD 函式

GCD 題意:輸入N,M(2<=N<=1000000000, 1<=M<=N), 設1<=X<=N,求使gcd(X,N)>=M的X的個數。  (文末有題) 題解一: 當M==1時,顯然答案為N。 當M!=1。  X是

函式應用1040 最大公約數之和

1040 最大公約數之和 1 秒   131,072 KB   80 分   5 級題 給出一個n,求1-n這n個數,同n的最大公約數的和。比如:n = 6 1,2,3,4,5,6 同6的最大公約數分別為1,2,

BZOJ4869 六省聯考2017相逢是問候線段樹+函式

  由擴充套件尤拉定理,a^(a^(a^(……^x)))%p中x作為指數的模數應該是φ(φ(φ(φ(……p)))),而p取log次φ就會變為1,也即每個位置一旦被修改一定次數後就會變為定值。線段樹維護區間剩餘修改次數的最大值,暴力修改即可。   可以預處理出每個位置進行k次操作後的值。直接計算是log^3的

BZOJ4916 神犇和蒟蒻函式+杜教篩

  第一問是來搞笑的。由尤拉函式的計算公式容易發現φ(i2)=iφ(i)。那麼可以發現φ(n2)*id(n)=Σd*φ(d)*(n/d)=nΣφ(d)=n2 。這樣就有了杜教篩所要求的容易算字首和的兩個函式。一通套路即可。 #include<iostream> #include<c

HDU 6390 GuGuFishtion函式+莫比烏斯反演

#include<bits/stdc++.h> using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #def

Luogu4980 【模板】Polya定理Polya定理+函式

  對於置換0→i,1→i+1……,其中包含0的迴圈的元素個數顯然是n/gcd(i,n),由對稱性,迴圈節個數即為gcd(i,n)。   那麼要求的即為Σngcd(i,n)/n(i=0~n-1,也即1~n)。考慮列舉gcd。顯然gcd(i,n)=x在該範圍內解的個數是φ(n/x)。分解一下質因數即可。