void divide(ll n) {
m = 0;
for(int i = 2; i <= sqrt(n); ++ i) if (n % i == 0) {
factor[++ m] = i, cnt[m] = 0;
while (n % i == 0) n /= i, ++ cnt[m];
}
if (n > 1) factor[++ m] = n, cnt[m] = 1;
}
上述方法正确
void divide(ll n) {
m = 0;
for(int i = 2; i * i <= n; ++ i) if (n % i == 0) {
factor[++ m] = i, cnt[m] = 0;
while (n % i == 0) n /= i, ++ cnt[m];
}
if (n > 1) factor[++ m] = n, cnt[m] = 1;
}
上述方法错误
因为在程序中不断对n进行修改
导致在for循环中的判断是错误的
但是本萌新认为i * i <= n与i <= sqrt(n)只从判断角度而言是完全一致的
那为什么上面的代码是可以过的呢?明明n也有进行修改