先筛素数,
再枚举题目范围内质数,答案就是求最小的ans=n-n/i*i ,其中i是枚举的质数
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; bool pri[10010]; void init() { int i,j; memset(pri,1,sizeof pri); pri[0]=pri[1]=0; for(i=2;i<=10005;i++) { if(!pri[i]) continue; for(j=i+i;j<=10005;j+=i) pri[j]=0; } } int main() { init(); int T,i,n,ans,x; scanf("%d",&T); while(T--) { scanf("%d",&n); ans=0,x=n; for(i=2;i<=n;i++) { if(pri[i]) { if(ans<n-n/i*i) ans=n-n/i*i,x=i; } } printf("%d\n",x); } return 0; }
时间: 2024-10-09 21:07:03