为啥样例过不了又AC了???
  • 板块P3601 签到题
  • 楼主xiaozhuo
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/8/28 09:44
  • 上次更新2023/11/3 00:46:22
查看原帖
为啥样例过不了又AC了???
355377
xiaozhuo楼主2023/8/28 09:44

我的样例都大了一,但是为啥评测是对的,快来个大佬帮忙看看QAQ,记录这里这里

#include<bits/stdc++.h>
using namespace std;
#define M 1000010
#define m 666623333
long long l, r, prime[M], cnt, f[M];
long long ans, phi[M], a[M];
void shai()
{
	for(int i = 2;i <= M;i ++)
	{
		if(!f[i]) prime[++ cnt] = i;
		for(int j = 1;j <= cnt && i * prime[j] <= M;j ++)
		{
			f[i * prime[j]] = 1;
			if(i % prime[j] == 0) break;
		}
	}
}
 
int main()
{
	shai();
	cin >> l >> r;
	for(long long i = l;i <= r;i ++)
	{
		phi[i - l] = i;
		a[i - l] = i;
	}
	int j = 1;
	while(prime[j] * prime[j] <= r)
	{
		long long p = prime[j];
		long long b = l / p * p + p;
		if(l % p == 0) b = l;
		for(long long i = b;i <= r;i += p)
		{
			phi[i - l] /= p, phi[i - l] *= (p - 1);
			while(a[i - l] % p == 0) a[i - l] /= p;
		}
		j ++;
	}
	for(long long i = l;i <= r;i ++)
	{
		if(a[i - l] != 1) phi[i - l] /= a[i - l], phi[i - l] *= (a[i - l] - 1);
		ans = (ans + i - phi[i - l]) % m;
	}
	cout << ans;
	return 0;
}
2023/8/28 09:44
加载中...