考慮小數點二分搜,我們去二分搜到剛好有
至於如何檢查,對於一個固定的分母
答案是
具體實作類似篩法,如下
int dp[N];
bool check(double x) {
for (int i = 1; i <= n; i++) {
dp[i] = 0;
}
int sum = 0;
for (int j = 2; j <= n; j++) {
dp[i] += x * j;
for (int i = j + j; i <= n; i += j) {
dp[i] -= dp[j];
}
sum += dp[j];
}
return sum >= k;
}
最後,要輸出分數答案時,找比
另一種想法也類似,我們觀察到,Farey 序列裡面相鄰兩項的差大於
所以我們可以去二分搜
也一樣用類篩法實作,最後要輸出答案時,找