警惕写了 514 天的 MR 是假的
  • 板块灌水区
  • 楼主Keroshi
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/2/6 20:34
  • 上次更新2025/2/7 08:40:25
查看原帖
警惕写了 514 天的 MR 是假的
511639
Keroshi楼主2025/2/6 20:34

今天做题的时候发现我一直写的 MR 是假的 /ll /ll

特别是用了那 77 个神秘数

错误示例(写了一年:

ll p[] = {2, 325, 9375, 28178, 450775, 9780504, 1795265022};
bool ip(ll n) {
	if(n < 2) return 0;
	REP(i, 7) {
		if(n == p[i]) return 1;
		if(n % p[i] == 0) return 0;
		if(n < p[i]) return 1;
		if(! Miller_Rabin(n, p[i])) return 0;
	}
	return 1;
}

正确示例:

ll p[] = {2, 325, 9375, 28178, 450775, 9780504, 1795265022};
bool ip(ll n) {
	if(n < 2) return 0;
	REP(i, 7) {
		if(n == p[i]) return 1;
		if(p[i] % n == 0) continue;
		if(n % p[i] == 0) return 0;
		if(! Miller_Rabin(n, p[i])) return 0;
	}
	return 1;
}

错误写法中有些合数因为写了 n < p[i] 被直接跳出没被判到,比如 4033403346814681

同时注意去掉 n < p[i] 后需要注意加上 if(p[i] % n == 0) continue;,不然会把一些质数判成合数

2025/2/6 20:34
加载中...