QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#873783 | #10039. Infinity Triples | rotcar07 | AC ✓ | 225ms | 10824kb | C++14 | 1.2kb | 2025-01-26 22:44:46 | 2025-01-26 22:44:47 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
constexpr int N=1e5+5;
int pr[N],n;vector<int>P;
typedef long long ll;
ll ans=0;
vector<int> w[N];
int z[1<<20];
int main(){
cin>>n;
for(int i=2;i<=n;i++){
if(!pr[i]) P.emplace_back(i),w[i].emplace_back(i);
for(int x:P){
if(i*x>n) break;
pr[i*x]=1;w[i*x]=w[i];
if(i%x==0)break;w[i*x].emplace_back(x);
}
}
for(int i=2;i<=n;i++){
int l=w[i].size();
for(int k=0;k<1<<l;k++){
z[k]=1;
for(int j=0;j<l;j++) if(k>>j&1) z[k]*=w[i][j];
}
auto dfs=[&](auto dfs,int x,int pos) -> void {
if(pos==l){
ll k=0;
for(int j=0;j<1<<l;j++){
int w=n/x/z[j];
if(__builtin_parity(j)) k-=w;
else k+=w;
}
ans+=(i-1)/x*k;
// cout<<i<<' '<<x<<' '<<ans<<'\n';
return;
}
for(;x*1ll*w[i][pos]<i;x*=w[i][pos]) dfs(dfs,x,pos+1);
dfs(dfs,x,pos+1);
};
dfs(dfs,1,0);
}
cout<<ans<<'\n';
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 8012kb
input:
2
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 0ms
memory: 6352kb
input:
3
output:
6
result:
ok 1 number(s): "6"
Test #3:
score: 0
Accepted
time: 1ms
memory: 6848kb
input:
42
output:
25055
result:
ok 1 number(s): "25055"
Test #4:
score: 0
Accepted
time: 0ms
memory: 6476kb
input:
300
output:
9451821
result:
ok 1 number(s): "9451821"
Test #5:
score: 0
Accepted
time: 4ms
memory: 8096kb
input:
5000
output:
44014644629
result:
ok 1 number(s): "44014644629"
Test #6:
score: 0
Accepted
time: 164ms
memory: 8908kb
input:
79526
output:
177147942250613
result:
ok 1 number(s): "177147942250613"
Test #7:
score: 0
Accepted
time: 225ms
memory: 10824kb
input:
100000
output:
352215237377619
result:
ok 1 number(s): "352215237377619"