【题解】NOIP2021 T1 报数
【NOIP2021】 报数
题解
先跑一遍筛法,把所有含7的数以及其倍数都筛出来,查询的时候记录一下答案即可。
code
#include
#include
using namespace std;
typedef long long ll;
const ll Maxn = 1e7;
ll n,num;
bool check(ll x) {
while(x>0) {
// printf("%lld ",x);
if(x%10==7) return true;
x/=10;
}
return false;
}
ll prime[Maxn],cnt;
ll ans[Maxn];
bool vis[Maxn];
void First () {
for(int i=1;i<=Maxn;i++){
if(vis[i]) continue;
if(check(i)) {
vis[i]=true;
for(int j=i+i;j<=Maxn;j+=i)
vis[j]=true;
}
}
}
int main() {
scanf("%lld",&n);
First();
// printf("%lld",vis[114]==true?0:1);
while(n--) {
scanf("%lld",&num);
if(vis[num]) printf("-1\n");
else {
if(ans[num]) {
printf("%lld\n",ans[num]);
continue;
}
ll pos=num+1;
while(pos) {
if(!vis[pos]) {
ans[num]=pos;
break;
}
pos++;
}
printf("%lld\n",pos);
}
}
return 0;
}