Description
小明是一个贪心的孩子,他天天想着怎么让自己省钱。有一天他去商店买物品,然而他不是普通人,他有一个马基雅把库内的能力,可以只花掉商品价格与他今日幸运数字x的最大公约数的钱就能买走这个商品。那么问题来了,如果他要买价值从1到x元的x个商品,一共要花掉多少钱。
Input
本题有多组测试数据,每组包含一个整数,代表小明今日的幸运数字x,1<=x<=1e11
Output
对于每组输入,请输出他的花费
每组输出占一行
Sample Input
1
2
3
5
Sample Output
1
3
5
9
思路:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL Euler(LL x) {
LL n = x;
for(LL i = 2; i * i <= x; i++) {
if(x % i == 0) {
n = n / i * (i - 1);
while(x % i == 0) {
x /= i;
}
}
}
if(x > 1) n = n/ x * (x - 1);
return n;
}
int main() {
LL n;
while(scanf("%lld", &n) != EOF) {
LL sum = 0, k;
for(LL i = 1; i * i <= n; i++) {
if(n % i == 0) sum += Euler(n / i) * i;
k = n / i;
if(n % k == 0 && k != i) sum += Euler(n / k) * k;
}
printf("%lld\n", sum);
}
return 0;
}