我正在尝试计算Euler的totient函数。它适用于小于10^5
的数字,但它会为大数字引发算术异常。
__int128_t fi(__int128_t n) {
double result = n;
for(int i = 0; pr[i] <= n; i++)
if (n % pr[i] == 0) result *= (1 - (double)1/pr[i]);
return result;
}
我尝试过做明确的演员表,但是没有成功。
pr
包含最高10^6
的素数除数。