如果我交这样的代码,会 WA。
#include <bits/stdc++.h>
using namespace std;
int n, ans;
int main()
{
start: scanf("%d", &n);
if(! n)
return 0;
if(n == 1)
{
printf("0\n");
goto start;
}
ans = n;
for(int i = 2; i * i <= n; ++ i)
if(! (n % i))
{
ans /= i;
ans *= i - 1;
while(! (n % i))
n /= i;
}
if(n != 1)
{
ans /= n;
ans *= n - 1;
}
printf("%d\n", ans);
main();
}
如果改成这样就 AC 了。
#include <bits/stdc++.h>
using namespace std;
int n, ans;
int main()
{
scanf("%d", &n);
if(! n)
return 0;
ans = n;
for(int i = 2; i * i <= n; ++ i)
if(! (n % i))
{
ans /= i;
ans *= i - 1;
while(! (n % i))
n /= i;
}
if(n != 1)
{
ans /= n;
ans *= n - 1;
}
printf("%d\n", ans);
main();
}
R71407574 记录详情、R71407696 记录详情。
是我的理解出错了吗?我认为 10,11 都是可以约分的,所以我进行了特判。