题目背景
Longge 的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。
题目描述
现在问题来了:给定一个整数 n,你需要求出 i=1∑ngcd(i,n),其中 gcd(i,n) 表示 i 和 n 的最大公因数。
输入格式
输入只有一行一个整数,表示 n。
输出格式
输出一行一个整数表示答案。
输入输出样例
输入 #1复制
6
输出 #1复制
15
说明/提示
数据规模与约定
-
对于 60% 的数据,保证 n≤216。
-
对于 100% 的数据,保证 1≤n<232。
-
代码实现:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; long long res=1, n; int main() { scanf("%lld", &n); long long m = n; for (long long i=2; i*i<=n; ++i) { if (n%i == 0) { m /= i; int cnt = 0; while (n%i == 0) ++cnt, n /= i; res = res * (cnt*(i-1) + i); } } if (n != 1) m /= n, res = res * (2*n - 1); cout << res * m << endl; return 0; }