社区讨论
求助!为什么过不了第二个样例?
P3601签到题参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lrkh8sfm
- 此快照首次捕获于
- 2024/01/19 18:07 2 年前
- 此快照最后确认于
- 2024/01/19 20:57 2 年前
甚至全都开了long long
CPP#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;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...