SDOI2012Longge的问题

2705: [SDOI2012]Longge的问题

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 930  Solved: 601
[Submit][Status]

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。

 

题解:

代码:

 1 var i:longint;
 2     n,k,ans:int64;
 3 procedure main;
 4  begin
 5  readln(n);
 6  ans:=n;
 7  for i:=2 to trunc(sqrt(n)) do
 8   if n mod i=0 then
 9    begin
10    k:=0;
11     while n mod i=0 do
12      begin
13       inc(k);
14       n:=n div i;
15      end;
16     inc(ans,ans*(i-1)*k div i);
17    end;
18  if n<>1 then inc(ans,ans*(n-1)*1 div n);
19  writeln(ans);
20  end;
21 begin
22  main;
23 end.     
View Code
原文地址:https://www.cnblogs.com/zyfzyf/p/3806364.html