QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#750572 | #9612. 月亮的背面是粉红色的 | Nesraychan | 21 | 1439ms | 138008kb | C++14 | 3.3kb | 2024-11-15 15:01:40 | 2024-11-15 15:01:41 |
Judging History
answer
#include<bits/stdc++.h>
#define IL inline
#define reg register
#define N 100000005
#define M 6000600
#define int long long
#define mod 1000000007
IL int read()
{
reg int x=0,f=0; reg char ch=getchar();
while(ch<'0'||ch>'9')f|=ch=='-',ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return f?-x:x;
}
IL int Add(reg int x,reg int y){return x+y<mod?x+y:x+y-mod;}
IL int Sub(reg int x,reg int y){return x<y?x-y+mod:x-y;}
IL void Pls(reg int &x,reg int y){x=Add(x,y);}
IL void Pls(reg signed &x,reg int y){x=Add(x,y);}
IL void Dec(reg int &x,reg int y){x=Sub(x,y);}
IL int Mul(reg int x,reg int y){reg long long r=1ll*x*y; return r<mod?r:r%mod;}
IL int power(reg int x,reg int p){reg int r=1; for(;p;p>>=1,x=Mul(x,x))if(p&1)r=Mul(r,x); return r;}
const int inv2=mod+1>>1,B=1e8;
int n,m,pri[M],tot;
std::bitset<N>isp;
IL void sieve(reg int n)
{
tot=0;
for(reg int i=2,j,v;i<=n;++i)
{
if(!isp[i])pri[++tot]=i;
for(j=1;j<=tot&&(v=i*pri[j])<=n;++j)
{
isp[v]=1;
if(i%pri[j]==0)break;
}
}
}
int ans0;
signed f0[N],g0[N];
IL void upd(reg int k0,reg int m)
{
if(m<=B)Pls(f0[m],k0);
else Pls(g0[n/m],k0);
}
void dfs(reg int i,reg int x,reg int f0)
{
if(i>tot||pri[i]*pri[i]>x)
{
upd(f0,x);
return;
}
dfs(i+1,x,f0);
dfs(i+1,x/pri[i]/pri[i],mod-f0);
}
int c[M];
std::vector<std::tuple<int,int,int>>vec;
main()
{
n=read(),m=read();
reg int lim=1;
while(lim*lim<=n)++lim;
sieve(lim-1);
vec.push_back({1,n,1});
while(vec.size())
{
auto [i,x,f0]=vec.back();
if(i>tot||pri[i]*pri[i]>x)
{
upd(f0,x),vec.pop_back();
continue;
}
if(c[i]==2)
{
c[i]=0;
vec.pop_back();
continue;
}
if(c[i]==1)
{
c[i]=2;
vec.push_back({i+1,x/pri[i]/pri[i],mod-f0});
}else
{
c[i]=1;
vec.push_back({i+1,x,f0});
}
}
fprintf(stderr,"%.3lf\n",1.0*clock()/CLOCKS_PER_SEC);
for(reg int x=1,m;x<=B;++x)if(f0[x])
{
m=x;
reg int s0=0,i1=1,i2=2,i3=3,i4=4,i5=5,i6=6,i7=7,i8=8;
while(i8*i8<=m)
{
s0+=m/i1,i1+=8;
s0+=m/i2,i2+=8;
s0+=m/i3,i3+=8;
s0+=m/i4,i4+=8;
s0+=m/i5,i5+=8;
s0+=m/i6,i6+=8;
s0+=m/i7,i7+=8;
s0+=m/i8,i8+=8;
}
while(i1*i1<=m)s0+=m/i1,++i1;
s0=(s0+s0-(i1-1)*(i1-1))%mod;
Pls(ans0,Mul(s0,f0[x]));
}
for(reg int x=1,m;x<=B;++x)if(g0[x])
{
m=n/x;
reg int s0=0,i1=1,i2=2,i3=3,i4=4,i5=5,i6=6,i7=7,i8=8;
while(i8*i8<=m)
{
s0+=m/i1,i1+=8;
s0+=m/i2,i2+=8;
s0+=m/i3,i3+=8;
s0+=m/i4,i4+=8;
s0+=m/i5,i5+=8;
s0+=m/i6,i6+=8;
s0+=m/i7,i7+=8;
s0+=m/i8,i8+=8;
}
while(i1*i1<=m)s0+=m/i1,++i1;
s0=(s0+s0-(i1-1)*(i1-1))%mod;
Pls(ans0,Mul(s0,g0[x]));
}
printf("%lld\n",power(ans0,2));
fprintf(stderr,"%.3lf\n",1.0*clock()/CLOCKS_PER_SEC);
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 60ms
memory: 6072kb
input:
1726 1
output:
84290761
result:
wrong answer Answer contains longer sequence [length = 2], but output contains 1 elements
Subtask #2:
score: 0
Wrong Answer
Test #4:
score: 0
Wrong Answer
time: 60ms
memory: 6140kb
input:
6116899 1
output:
219318963
result:
wrong answer Answer contains longer sequence [length = 2], but output contains 1 elements
Subtask #3:
score: 8
Accepted
Test #7:
score: 8
Accepted
time: 64ms
memory: 7204kb
input:
6469467712 0
output:
147393348
result:
ok 1 number(s): "147393348"
Test #8:
score: 8
Accepted
time: 64ms
memory: 7308kb
input:
8967004453 0
output:
229436583
result:
ok 1 number(s): "229436583"
Test #9:
score: 8
Accepted
time: 64ms
memory: 7152kb
input:
6636594384 0
output:
995965072
result:
ok 1 number(s): "995965072"
Subtask #4:
score: 0
Wrong Answer
Test #10:
score: 0
Wrong Answer
time: 60ms
memory: 7280kb
input:
8292948816 1
output:
566765721
result:
wrong answer Answer contains longer sequence [length = 2], but output contains 1 elements
Subtask #5:
score: 0
Wrong Answer
Test #13:
score: 0
Wrong Answer
time: 87ms
memory: 16488kb
input:
900472451132 1
output:
247050500
result:
wrong answer Answer contains longer sequence [length = 2], but output contains 1 elements
Subtask #6:
score: 0
Wrong Answer
Test #16:
score: 0
Wrong Answer
time: 198ms
memory: 24168kb
input:
9864907300784 1
output:
359943536
result:
wrong answer Answer contains longer sequence [length = 2], but output contains 1 elements
Subtask #7:
score: 13
Accepted
Test #19:
score: 13
Accepted
time: 486ms
memory: 55852kb
input:
96735749745529 0
output:
223354886
result:
ok 1 number(s): "223354886"
Test #20:
score: 13
Accepted
time: 482ms
memory: 55648kb
input:
95243570720799 0
output:
555372474
result:
ok 1 number(s): "555372474"
Test #21:
score: 13
Accepted
time: 485ms
memory: 55672kb
input:
97668723090105 0
output:
84562124
result:
ok 1 number(s): "84562124"
Subtask #8:
score: 0
Wrong Answer
Test #22:
score: 0
Wrong Answer
time: 466ms
memory: 57716kb
input:
94060593399194 1
output:
52991150
result:
wrong answer Answer contains longer sequence [length = 2], but output contains 1 elements
Subtask #9:
score: 0
Time Limit Exceeded
Test #25:
score: 0
Time Limit Exceeded
input:
9772457586483846 0
output:
result:
Subtask #10:
score: 0
Wrong Answer
Test #31:
score: 0
Wrong Answer
time: 1439ms
memory: 138008kb
input:
949243849085176 1
output:
508465534
result:
wrong answer Answer contains longer sequence [length = 2], but output contains 1 elements