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) //實際上應該是n<=10^18output
公約數之和input示例
6output示例
15尤拉函式
對於 樣例
1 2 3 2 1 ----6
有2個1 2個2 和 1個3
兩個1的情況 1,5與6互質
兩個2的情況 1(2/2),2(4/2) 與3互質(6/2)
乙個三的情況 1(3/3) 與2(6/3) 互質
列舉n的所有因子
所以 對於某個因子 i
ans+=i*phi(n/i);
1 #include 2 #include 3 #include 4**5 typedef long
long
ll;6
7ll n;89
ll get_phi(ll x) 16}
17if(x>1) sum-=sum/x;
18return
sum;19}
2021
inthh() 32}
33if(sq*sq==n) ans-=sq*get_phi(sq);
34 printf("
%lld\n
",ans);
35return0;
36}3738
int sb=hh();
39int main(int argc,char**argv)
51nod 1040 最大公約數之和
1040 最大公約數之和 rihkddd 基準時間限制 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 input 1個數n ...
51nod1040最大公約數之和
題目大意 給出乙個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 公約數之和 思路 將n分解質因子,每個質因子貢獻的是多少,累加求和。每個質因子貢獻的次數...
51Nod 1040 最大公約數之和
分析題目可以發現,兩個數gc d a,b x 則等價於gc d ax bx 1,問題就可以轉化為滿足gc d nx ix 1的i的個數,對答案貢獻就是個數乘上gc d n,i 很容易可以想到尤拉函式,因為 n 是小於等於n的數中與n互質的數的數目,gc d nx ix 1的i的個數就等於 nx 那麼...