题解:P11169 「CMOI R1」Bismuth / Linear Sieve
Hopeful_Hunter · · 题解
首先观察样例发现第一个样例一定是
手推一下加入数字的过程:
当处理到数字二时,此时
当处理到数字三时,此时
......
首先大于所有大于
接着对于所有大于
由于两种筛法都没有办法筛出奇数,而
接着考虑计算
首先必然有
注意:
代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n;
long long gcd(long long a, long long b){
return !b ? a : gcd(b, a % b);
}
long long lcm(long long a, long long b){
return a / gcd(a, b) * b;
}
int main(){
cin >> n;
if(n == 1){
cout << 0 << ' ' << 0;
return 0;
}
cout << (n + 1) / 2 << ' ';
long long ans = (n / 2) / 2;
long long l = 2;
for(long long i = 2; 2 * i - 1 <= n; i++){
long long nw = 2 * i - 1;
l = lcm(l, nw);
if(l > n) break;
ans += (n / nw) / l;
}
cout << ans;
return 0;
}