1040 最大公約數之和 尤拉函式

2022-04-11 02:02:18 字數 961 閱讀 1334

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

input

1個數n(n <= 10^9)
output

公約數之和
input示例

6
output示例

15

//先列舉 n 的因數,假設為k,如果乙個數x,與 n 的最大公約數等於 k, 那麼必定 x/k 與 n/k 互質,那麼求出個數累加即可,就轉化成尤拉函式了!

o(根號n*根號k...)? 反正很小了

1 #include 2

using

namespace

std;

3#define mod 1000000007

4#define inf 0x3f3f3f3f

5#define eps 1e-9

6#define ll long long

7#define mx 1002

8#define mk 20002910

ll n;

11ll euler(ll x)

1221}22

if (x>1) res = res/x*(x-1

);23

return

res;24}

2526

intmain()

2739

}40 printf("

%lld\n

",ans);41}

42return0;

43 }

view code

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

題目傳送門 我連這種水題都不會做啦 感覺要炸啊 n 的最大公約數必定是 n的因數 x 如果有 g個數和 n 的最大公約數為 x,那麼這 g 個數對答案的貢獻顯然為x g。那麼問題就轉化成了如何快速求出和 n 的最大公約數為 x的個數 g 觀察等式gc d n,i x 可以轉化成gc d n x,i ...

51nod 1040 最大公約數之和(尤拉)

連線 根據題意我們要把每個數與n 的最大公約數求出來是不可能的,先找出n的所有因數,既然是n的最大公約數,那麼他們之間肯定有共同的因子,而與n 的因子互質的數他們的最大公約數就是該因子m,再乘以倍數,總和相加就是了 include include include using namespace st...

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 ...