本地下载过了,提交时60分,求条(玄关)
查看原帖
本地下载过了,提交时60分,求条(玄关)
920406
违规用户名920406楼主2024/11/3 15:12
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+1;
int m,c,l,r,ans,a[N],t[N],p[N],an[N];
signed main()
{
	cin>>l>>r;
	c=r-l+1;
	for(int i=1;i<=c;i++)
	{
		a[i]=l+i-1;
		an[i]=1;
	}
	for(int i=2;i<=N;i++)
	{
		if(!t[i])   p[++m]=i;
		for(int j=1;j<=m&&i*p[j]<=N;j++)
		{
			t[i*p[j]]=1;
			if(i%p[j]==0)   break;
		}
	}
	for(int i=1;i<=m;i++)
	{
		int P=p[i];
		for(int j=P-(l-1)%P;j<=c;j+=P)
		{
			int k=P-1,t=1;
			while(a[j]%P==0)
			{
				a[j]/=P;
				k*=P;
				if(t)	k/=P,t=0;
			}
			an[j]=k%666623333*an[j]%666623333;
		}
	}
	for(int i=1;i<=c;i++)
	{
		if(a[i]!=1)	an[i]*=a[i]-1;
		ans=(ans+l+i-an[i]-1)%666623333;
	}
	cout<<ans;
	return 0;
}
2024/11/3 15:12
加载中...