QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#882935 | #10039. Infinity Triples | lgvc# | AC ✓ | 375ms | 19284kb | C++23 | 1.3kb | 2025-02-05 13:39:50 | 2025-02-05 13:39:51 |
Judging History
answer
#include <bits/stdc++.h>
int M,vq[200009],miu[200009],su[200009],k;
std::vector<int> t[200009],tq,as,d[200009];
void dfs(int v,int p) {
if(p==tq.size()) {
as.push_back(v);
return;
}
while(1) {
dfs(v,p+1);
if(v>M/tq[p]) return;
v*=tq[p];
}
}
int cl(int x,int y) {
int as=0;
for(int i=0;i<d[x].size();i++) {
int p=d[x][i];
as+=miu[p]*y/p;
}
return as;
}
signed main(void) {
scanf("%d",&M);
long long ans=0;
miu[1]=1;
for(int i=2;i<=M;i++) {
if(!vq[i]) {
su[++k]=i;
miu[i]=-1;
for(int j=i;j<=M;j+=i) t[j].push_back(i);
}
for(int j=1;j<=k&&su[j]*i<=M;j++) {
vq[i*su[j]]=1;
if(i%su[j]==0) break;
miu[i*su[j]]=-miu[i];
}
}
for(int i=1;i<=M;i++) {
if(miu[i]==0) continue;
for(int j=i;j<=M;j+=i) d[j].push_back(i);
}
for(int b=2;b<=M;b++) {
tq.clear();
as.clear();
for(int i=0;i<t[b].size();i++) {
int x=t[b][i];
tq.push_back(x);
}
dfs(1,0);
for(int j=0;j<as.size();j++) {
int x=as[j];
ans+=1ll*(b-1)/x*cl(b,M/x);
}
}
printf("%lld",ans);
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 5968kb
input:
2
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 1ms
memory: 3840kb
input:
3
output:
6
result:
ok 1 number(s): "6"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3840kb
input:
42
output:
25055
result:
ok 1 number(s): "25055"
Test #4:
score: 0
Accepted
time: 0ms
memory: 5964kb
input:
300
output:
9451821
result:
ok 1 number(s): "9451821"
Test #5:
score: 0
Accepted
time: 7ms
memory: 6612kb
input:
5000
output:
44014644629
result:
ok 1 number(s): "44014644629"
Test #6:
score: 0
Accepted
time: 276ms
memory: 15104kb
input:
79526
output:
177147942250613
result:
ok 1 number(s): "177147942250613"
Test #7:
score: 0
Accepted
time: 375ms
memory: 19284kb
input:
100000
output:
352215237377619
result:
ok 1 number(s): "352215237377619"