求助!为什么过不了第二个样例?
  • 板块P3601 签到题
  • 楼主csq_pig
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/19 18:06
  • 上次更新2024/1/19 20:57:52
查看原帖
求助!为什么过不了第二个样例?
1073710
csq_pig楼主2024/1/19 18:06

甚至全都开了long long

#include <bits/stdc++.h>
using namespace std;
const long long MOD=666623333;
long long prime[1000010],t;
long long l,r,ans;
bool is_prime[1000010];
long long bigprime[1000010];
long long phi[1000010];
void oral_prime ()
{
	for (long long i=1;i<=1000000;i++)
		is_prime[i]=true;
	for (long long i=2;i<=1000000;i++) {
		if (is_prime[i]==true) prime[++t]=i;
		for (long long j=1;j<=t && prime[j]*i<=1000000;j++) {
			is_prime[i*prime[j]]=false;
			if (i%prime[j]==0) break;
		}
	}
}
int main()
{
	oral_prime();
	scanf("%lld%lld",&l,&r);
	for (long long i=l;i<=r;i++) {
		bigprime[i-l]=i;
		phi[i-l]=i;
	}
	for (long long i=1;i<=t;i++) {
		for (long long j=max(prime[i]*prime[i],((l%prime[i]==0)?l:(l/prime[i]*prime[i]+prime[i])));j<=r;j+=prime[i]) {
			phi[j-l]=(phi[j-l]/prime[i]*(prime[i]-1))%MOD;
			while (bigprime[j-l]%prime[i]==0) bigprime[j-l]/=prime[i];
		}
	}
	for (long long i=l;i<=r;i++)
		if (bigprime[i-l]!=1) phi[i-l]=(phi[i-l]/bigprime[i-l]*(bigprime[i-l]-1))%MOD;
	for (long long i=l;i<=r;i++) {
		ans=ans-phi[i-l]+i;
		ans%=MOD;
	}
	printf("%lld",ans%MOD);
	return 0;
}

2024/1/19 18:06
加载中...