最后一个点TLE,Miller-rabbin算法求调!
查看原帖
最后一个点TLE,Miller-rabbin算法求调!
1074696
tmlrock楼主2023/10/2 20:42
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int qpow(int a, int b, int mod) {
	int ans = 1;
	while (b) {
		if (b & 1) ans = (1ll * ans * a) % mod;
		b >>= 1;
		a = (1ll * a * a) % mod;
	}
	return ans % mod;
}
inline bool miller_rabbin(int x, int seed) {
	if (x == 2)return true;
	if (x & 1) {
		register int u = x - 1;
		register int v = 0;
		while (!(u & 1))++v, u >>= 1;
		register int s1, s2;
		s1 = qpow(seed, u, x);
		s2 = 0;
		for (int i = 0; i < v; ++i) {
			s2 = (s1 * s1) % x;
			if (s2 == 1 && s1 != 1 && s1 != (x - 1))return false;
			s1 = s2;
		}
		return ((s1 % x) == 1);
	} else return false;
}
signed main() {
	int l, r, ans;
	cin >> l >> r;
	ans = 0;
	for (register int i = l; i <= r; ++i)if ( miller_rabbin(i, 2) && miller_rabbin(i, 3) && miller_rabbin(i,61) )++ans;
	cout << ans;
	return 0;
}
2023/10/2 20:42
加载中...