#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int t,n;
/*
情况1:能被7整除
情况2:数字中带有7
情况3:因数出现以上两者之一的情况
输出:从当前数字开始往后一个一个枚举 直到枚出ok的
*/
int len(int a){
int ans=1;
while(a/=10) ans++;
return ans;
}
bool ok(int a){//判断是否能选数
if(a%7==0) return 0;
if(a<7) return 1;
int k=a,l=len(k),sum;
while(l--){
sum=k-(k/10*10);//求当前最低位
if(sum!=0&&sum==7) return 0;
k/=10;
}
k=a;
for(int i=2;i<=sqrt(k);i++){//分析它的因数
if(k%i==0){//对于其因数
if(!ok(i)||!ok(k/i)) return 0;
}
}
return 1;
}
int ans(int a){
a++;
while(!ok(a)) a++;
return a;
}
int main(){
cin>>t;
while(t--){
cin>>n;
if(ok(n)) cout<<ans(n)<<endl;//输出下一个数
else cout<<"-1"<<endl;
}
return 0;
}
主要思路都写在代码里了。不太会分析时间复杂度,求大佬分析 + 帮调,感谢!!!