萌新关于分解质因数求助
  • 板块学术版
  • 楼主灰的积雨云
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/8/17 10:33
  • 上次更新2023/11/3 03:12:51
查看原帖
萌新关于分解质因数求助
349713
灰的积雨云楼主2023/8/17 10:33
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也有进行修改

2023/8/17 10:33
加载中...