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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【bzoj2705】[SDOI2012]Longge的问题 欧拉函数

發布時間:2024/1/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【bzoj2705】[SDOI2012]Longge的问题 欧拉函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

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

輸入

一個整數,為N。

輸出

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

樣例輸入

6

樣例輸出

15


題解

歐拉函數

易得知滿足gcd(n,x)==i的小于等于n的x的個數為phi(n/i),

并且歐拉函數可以在O(√n)的時間內快速求出。。

于是可以先求出所有n的因子,再用歐拉函數得出答案。

由于因子是成對出現的,所以因子并不需要枚舉到n,只需枚舉到√n。如果i是n的因子,那么n/i也是n的因子,注意此時i*i==n不能算進答案內。

#include <cstdio> typedef long long ll; ll phi(ll x) {ll ans = x , t = x , i;for(i = 2 ; i * i <= x ; i ++ ){if(t % i == 0) ans = ans * (i - 1) / i;while(t % i == 0) t /= i;}if(t > 1) ans = ans * (t - 1) / t;return ans; } int main() {ll n , i , ans = 0;scanf("%lld" , &n);for(i = 1 ; i * i <= n ; i ++ ){if(n % i == 0){ans += i * phi(n / i);if(i * i < n) ans += (n / i) * phi(i);}}printf("%lld\n" , ans);return 0; }

轉載于:https://www.cnblogs.com/GXZlegend/p/6633646.html

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

總結

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

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