QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#218358 | #8. 奇数国 | _LAP_ | 0 | 0ms | 0kb | C++14 | 2.5kb | 2023-10-18 08:28:15 | 2023-10-18 08:28:16 |
answer
#include <bits/stdc++.h>
using namespace std;
const int n = 1e5, MOD = 19961993;
inline int Plus(int a, int b) {return a + b >= MOD ? a + b - MOD : a + b; }
inline int Minus(int a, int b) {return a - b < 0 ? a - b + MOD : a - b; }
inline long long ksm(long long a, int b) {
long long r = 1;
while(b) {
if(b & 1) r = r * a % MOD;
b >>= 1, a = a * a % MOD;
}
return r;
}
// inline bool isprime(int x) {
// for(int i = 2; i * i <= x; i ++)
// if(x % i == 0) return false;
// return true;
// }
int inv[MOD];
vector<int> primes; bool st[300];
inline void Sieve() {
const int lim = 281;
for(int i = 2; i <= lim; i ++) if(!st[i]) {
primes.emplace_back(i);
for(int j = i; j <= lim; j += i) st[j] = true;
}
}
struct SegmentTree {
#define lc (u << 1)
#define rc (u << 1 | 1)
int C[(n << 2) + 10];
void modify(int u, int l, int r, int p, int x) {
if(l == r) {C[u] = x; return; }
int mid = (l + r) >> 1;
if(p <= mid) modify(lc, l, mid, p, x);
else modify(rc, mid + 1, r, p, x);
C[u] = C[lc] + C[rc];
}
int ask(int u, int l, int r, int L, int R) {
if(l >= L && r <= R) return C[u];
int mid = (l + r) >> 1;
if(mid >= R) return ask(lc, l, mid, L, R);
if(mid < L) return ask(rc, mid + 1, r, L, R);
return ask(lc, l, mid, L, R) + ask(rc, mid + 1, r, L, R);
}
#undef lc
#undef rc
} Seg[60];
int main() {
ios::sync_with_stdio(false), cin.tie(0);
// cerr << isprime(MOD) << '\n';
// Sieve(); cerr << primes.size() << '\n';
// for(auto x : primes) cerr << x << ' ';
// cerr << '\n'; return 0;
Sieve();
for(int i = 1; i < MOD; i ++) inv[i] = ksm(i, MOD - 2);
for(int i = 1; i <= n; i ++) Seg[1].modify(1, 1, n, i, 1);
int T; cin >> T;
while(T --) {
int op, x, y; cin >> op >> x >> y;
if(op == 0) {
int r = 1;
for(int i = 0; i < 60; i ++) {
int c = Seg[i].ask(1, 1, n, x, y);
if(c == 0) continue;
int t = ksm(primes[i], c - 1), tt = 1ll * t * primes[i] % MOD;
r = 1ll * r * Minus(tt, t) % MOD;
}
cout << r << '\n';
} else {
for(int i = 0; i < 60; i ++) {
int p = primes[i];
int c = 0; while(y % p == 0) y /= p, c ++;
Seg[i].modify(1, 1, n, x, c);
}
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Time Limit Exceeded
input:
122 1 47 84606 1 39 10304 0 31 46 0 47 50 1 16 80142 1 15 55620 1 56 8487 1 22 65813 0 17 28 1 45 73139 0 41 47 1 15 73640 1 40 44390 1 68 70490 0 63 69 0 39 40 0 12 16 1 25 3444 0 25 27 1 18 31800 1 60 89056 1 60 52890 0 53 60 0 53 60 1 63 3243 1 54 9100 0 51 59 1 35 36461 1 61 52428 0 55 61 1 50 6...
output:
result:
Test #2:
score: 0
Time Limit Exceeded
input:
10000 1 3204 2085 0 3193 3210 0 5567 5581 0 5070 5093 1 7744 53578 0 7726 7744 1 5938 90890 0 5933 5946 1 2282 404 0 2275 2293 0 5529 5552 0 5411 5427 1 1288 83658 1 1691 75254 1 8728 1909 1 9085 92560 0 9068 9085 0 8728 8731 1 6452 52632 0 6444 6458 0 1691 1704 0 1270 1288 0 5233 5248 0 5400 5420 0...
output:
result:
Test #3:
score: 0
Time Limit Exceeded
input:
20000 0 4519 6399 0 5538 5991 0 5830 7147 1 5838 256887 0 5544 7321 1 3889 10561 1 2843 775260 0 1555 2973 0 2570 5389 0 5338 6500 1 9416 950309 1 5569 690690 1 3145 135315 1 2365 35167 1 3940 43 1 5310 5353 1 8337 568841 1 5796 169 1 3104 746130 0 2515 3432 1 10626 35611 0 8635 12588 1 10562 946774...
output:
result:
Test #4:
score: 0
Time Limit Exceeded
input:
30000 1 12080 458075 0 9890 15050 1 7144 149 0 4091 10808 1 5942 843378 0 2599 9264 1 9921 6647 0 6378 12730 1 8131 602651 0 5475 11565 1 9005 870870 0 6625 12774 1 11492 690690 0 8194 14863 1 4340 256 0 918 6863 1 7069 344488 0 3763 10001 1 12418 8192 0 9118 15941 1 11125 690690 0 8462 14279 1 9951...
output:
result:
Test #5:
score: 0
Time Limit Exceeded
input:
50000 1 29347 187726 0 25914 32532 1 20674 8192 0 15953 24784 1 24117 4752 0 19706 27975 1 22413 538 0 18457 27027 1 25177 931944 0 20749 29602 1 25822 52728 0 22542 28875 1 27405 746130 0 23587 31278 1 24494 24187 0 20318 27988 1 23628 85158 0 20006 28203 1 20524 24389 0 16166 24111 1 29127 733825 ...
output:
result:
Test #6:
score: 0
Time Limit Exceeded
input:
60000 1 6 2 1 12 3 1 18 5 1 24 7 1 30 11 1 36 13 1 42 17 1 48 19 1 54 23 1 60 29 1 66 31 1 72 37 1 78 41 1 84 43 1 90 47 1 96 53 1 102 59 1 108 61 1 114 67 1 120 71 1 126 73 1 132 79 1 138 83 1 144 89 1 150 97 1 156 101 1 162 103 1 168 107 1 174 109 1 180 113 1 186 127 1 192 131 1 198 137 1 204 139 ...
output:
result:
Test #7:
score: 0
Time Limit Exceeded
input:
70000 1 7 2 1 14 3 1 21 5 1 28 7 1 35 11 1 42 13 1 49 17 1 56 19 1 63 23 1 70 29 1 77 31 1 84 37 1 91 41 1 98 43 1 105 47 1 112 53 1 119 59 1 126 61 1 133 67 1 140 71 1 147 73 1 154 79 1 161 83 1 168 89 1 175 97 1 182 101 1 189 103 1 196 107 1 203 109 1 210 113 1 217 127 1 224 131 1 231 137 1 238 13...
output:
result:
Test #8:
score: 0
Time Limit Exceeded
input:
80000 1 8 2 1 16 3 1 24 5 1 32 7 1 40 11 1 48 13 1 56 17 1 64 19 1 72 23 1 80 29 1 88 31 1 96 37 1 104 41 1 112 43 1 120 47 1 128 53 1 136 59 1 144 61 1 152 67 1 160 71 1 168 73 1 176 79 1 184 83 1 192 89 1 200 97 1 208 101 1 216 103 1 224 107 1 232 109 1 240 113 1 248 127 1 256 131 1 264 137 1 272 ...
output:
result:
Test #9:
score: 0
Time Limit Exceeded
input:
90000 1 9 2 1 18 3 1 27 5 1 36 7 1 45 11 1 54 13 1 63 17 1 72 19 1 81 23 1 90 29 1 99 31 1 108 37 1 117 41 1 126 43 1 135 47 1 144 53 1 153 59 1 162 61 1 171 67 1 180 71 1 189 73 1 198 79 1 207 83 1 216 89 1 225 97 1 234 101 1 243 103 1 252 107 1 261 109 1 270 113 1 279 127 1 288 131 1 297 137 1 306...
output:
result:
Test #10:
score: 0
Time Limit Exceeded
input:
100000 1 10 2 1 20 3 1 30 5 1 40 7 1 50 11 1 60 13 1 70 17 1 80 19 1 90 23 1 100 29 1 110 31 1 120 37 1 130 41 1 140 43 1 150 47 1 160 53 1 170 59 1 180 61 1 190 67 1 200 71 1 210 73 1 220 79 1 230 83 1 240 89 1 250 97 1 260 101 1 270 103 1 280 107 1 290 109 1 300 113 1 310 127 1 320 131 1 330 137 1...