全部运行时错误,大佬帮忙看看
查看原帖
全部运行时错误,大佬帮忙看看
534953
Furina_zbg楼主2024/4/16 14:06
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int p = 131;
int len, ans, t, l, r, f[500010], a[500010], gx[500010],
 cnt, cx[500010];
char s[500010];
bool check(int l, int r, int s) {
	return a[r] - a[l + s - 1] * f[len - s] == 
	a[l + (len / s - 1) * s - 1] - a[l - 1] * f[len - s];
}
signed main () {
	int i, j, n;
	scanf("%u %s", &n, s + 1);
	f[0] = 1;
	for (i = 1; i <= n; ++i)
		a[i] = a[i - 1] * p + (int)(s[i]), f[i] = f[i - 1] * p;
	for (i = 2; i <= n; ++i) {
		if(!cx[i]) {
			gx[++cnt] = i;
			cx[i] = i;
		}
		for (j = 1; j <= cnt; ++j) {
			if(gx[j] > cx[i] || gx[j] * i > n) break;
			cx[gx[j] * i] = gx[j];
		}
	}
	int T;
	scanf("%u", &T);
	while(T--) {
		scanf("%u %u", &l, &r);
		len = ans = t = r - l + 1ull;
		while(t != 1) {
			int k = cx[t];
			while(t % k == 0 && check(l, r, ans / cx[t]))
				t /= k, ans /= k;
			while(t % k == 0) t /= k;
		}
		printf("%u\n", ans);
	}
}
2024/4/16 14:06
加载中...