P7960 [NOIP2021] 报数
Histcat
共 253 字
题目
link
题解
简单的一个筛法
一个数不能取到,那么它的倍数一定不能取到
看一个数能不能取到,暴力求解就行
不过,要对于每个数预处理出答案
具体看代码
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #include<bits/stdc++.h>
using namespace std; const int N = 1e7 + 10; bool f[N]; int nxt[N]; int main() { ios::sync_with_stdio(0), cin.tie(0);
for(int i = 1;i < N;i++) { if(f[i]) { continue; } bool fl = 0; int x = i; while(x) { if(x % 10 == 7) { fl = 1; break; } x /= 10; } if(fl) { for(int k = i;k < N;k += i) { f[k] = 1; } } } int ls = 0; for(int i = 1;i < N;i++) { if(!f[i]) { for(int k = ls + 1;k <= i;k++) { nxt[k] = i; } ls = i; } }
int T, x; cin >> T; while( T -- ) { cin >> x; if(f[x]) cout << -1 << "\n"; else cout << nxt[x + 1] << "\n"; } return 0; }
|