ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#203224 | #571. 斐波那契 | tkswls | 100 | 273ms | 80536kb | C++ | 1.5kb | 2024-02-21 07:54:14 | 2024-02-21 12:09:41 |
answer
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, f[2000006], b[2000006], sum[2000006], prime[2000006], ccnt, mo[2000006], ans, ssum[2000006];
const int mod = 1000000007;
inline int calc(int p, int q) {
int cnt = 0;
for (int l = 1, r; l <= min(p, q); l = r + 1) {
r = min(p / (p / l), q / (q / l));
r = min(r, min(p, q));
// cout << l << '-' << r << "-" << p / l << "-" << q / l << ' ' << mo[r] - mo[l - 1] << "p[]\n";
cnt = cnt + ((sum[r] - sum[l - 1] + mod) % mod) * (p / l) % mod * (q / l) % mod;
cnt %= mod;
}
return cnt;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
f[1] = f[2] = 1;
for (int i = 3; i <= max(n, m); i++) {
f[i] = f[i - 1] + f[i - 2];
f[i] %= mod;
}
mo[1] = 1;
for (int i = 2; i <= max(n, m); i++) {
if (!b[i]) {
b[i] = i, prime[++ccnt] = i;
mo[i] = -1;
}
for (int j = 1; j <= ccnt && i * prime[j] <= max(n, m); j++) {
b[i * prime[j]] = prime[j];
if (i % prime[j] == 0) {
mo[i * prime[j]] = 0;
break;
} else {
mo[i * prime[j]] = -mo[i];
}
}
}
for (int i = 1; i <= max(n, m); i++) {
sum[i] = sum[i - 1] + mo[i];
sum[i] = (sum[i] + mod) % mod;
}
for (int i = 1; i <= min(n, m); i++) {
ssum[i] = (ssum[i - 1] + f[i]) % mod;
}
for (int l = 1, r; l <= min(n, m); l = r + 1) {
r = min(n / (n / l), m / (m / l));
r = min(r, min(n, m));
ans = ans + (ssum[r] - ssum[l - 1] + mod) % mod * calc(n / l, m / l);
ans %= mod;
}
cout << ans;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 0ms
memory: 1272kb
input:
10 10
output:
251
result:
ok single line: '251'
Test #2:
score: 10
Accepted
time: 0ms
memory: 1312kb
input:
1000 981
output:
201652910
result:
ok single line: '201652910'
Test #3:
score: 10
Accepted
time: 0ms
memory: 1308kb
input:
906 1000
output:
524439478
result:
ok single line: '524439478'
Test #4:
score: 10
Accepted
time: 0ms
memory: 1316kb
input:
1000 1000
output:
542559755
result:
ok single line: '542559755'
Test #5:
score: 10
Accepted
time: 0ms
memory: 1288kb
input:
507 507
output:
112783388
result:
ok single line: '112783388'
Test #6:
score: 10
Accepted
time: 3ms
memory: 5248kb
input:
100000 100000
output:
766972956
result:
ok single line: '766972956'
Test #7:
score: 10
Accepted
time: 38ms
memory: 40948kb
input:
1000000 1000000
output:
272430913
result:
ok single line: '272430913'
Test #8:
score: 10
Accepted
time: 65ms
memory: 71992kb
input:
2000000 905234
output:
57001167
result:
ok single line: '57001167'
Test #9:
score: 10
Accepted
time: 93ms
memory: 72352kb
input:
951250 2000000
output:
390388595
result:
ok single line: '390388595'
Test #10:
score: 10
Accepted
time: 74ms
memory: 80536kb
input:
2000000 2000000
output:
46360093
result:
ok single line: '46360093'