AC:
#include <bits/stdc++.h>
using namespace std;
const int SIZE = 200005;
const int Max = 10000005;
int n;
int v[10000005];
queue<int> q;
inline int rd(){
int x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){
if(ch == '-') f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9'){
x = (x<<1)+(x<<3)+(ch^48);
ch = getchar();
}
return x*f;
}
int main(){
// freopen("number.in", "r", stdin);
// freopen("number.out", "w", stdout);
for(int i =1; i <= Max; i++){
if(v[i]) continue;
else{
int x = i; bool flag = false;
while(x){
if(x%10 == 7){
flag = true;
break;
}
x /= 10;
}
if(i%7 == 0 || flag){
v[i] = 1;
for(int j = i*2; j <= Max; j += i){
v[j] = 1;
}
}
else{
int now = i;
while(v[now-1]){
v[now-1] = i;
now--;
}
}
}
}
// for(int i = 1; i <= 100; i++)
// printf("%d %d\n", i, v[i]);
n = rd();
for(int i = 1; i <= n; i++){
int a = rd();
if(v[a]) puts("-1");
else{
if(v[a+1] == 0) printf("%d\n", a+1);
else printf("%d\n", v[a+1]);
}
}
return 0;
}
WA0:
#include <bits/stdc++.h>
using namespace std;
const int SIZE = 200005;
const int Max = 10000005;
int n;
int v[10000005];
queue<int> q;
inline int rd(){
int x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){
if(ch == '-') f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9'){
x = (x<<1)+(x<<3)+(ch^48);
ch = getchar();
}
return x*f;
}
int main(){
// freopen("number.in", "r", stdin);
// freopen("number.out", "w", stdout);
n = rd();
for(int i = 1; i <= Max; i++){
if(v[i]) continue;
else{
int x = i; bool flag = false;
while(x){
if(x%10 == 7){
flag = true;
break;
}
x /= 10;
}
if(i%7 == 0 || flag){
v[i] = 1;
for(int j = i*2; j <= Max; j += i){
v[j] = 1;
}
}
else{
int now = i;
while(v[now-1]){
v[now-1] = i;
now--;
}
}
}
}
// for(int i = 1; i <= 100; i++)
// printf("%d %d\n", i, v[i]);
for(int i = 1; i <= n; i++){
int a = rd();
if(v[a]) puts("-1");
else{
if(v[a+1] == 0) printf("%d\n", a+1);
else printf("%d\n", v[a+1]);
}
}
return 0;
}
就改了读入n的顺序,区别真的这么大吗