是不是没开long long!!
注意:输入数据和欧拉函数的计算可以直接使用unsigned int,但是答案必须long long!!
实在懒得想就直接全long long好了……
错误范例:
#include <cstdio>
#define uint32 unsigned
using namespace std;
inline uint32 phi(uint32 n)
{
uint32 res = n;
for(uint32 i=2; i<=n/i; i++)
if(n % i == 0)
{
(res /= i) *= i - 1;
while(n % i == 0) n /= i;
}
if(n > 1) (res /= n) *= n - 1;
return res;
}
int main()
{
uint32 n, ans = 0;
scanf("%u", &n);
for(uint32 i=1; i<=n/i; i++)
if(n % i == 0)
{
uint32 t = n / i;
ans += i * phi(t);
if(i != t)
ans += t * phi(i);
}
printf("%u\n", ans);
return 0;
}
Hack 数据:
4294967294
正确输出:
12884901879
错误输出:
4294967287