#include "stdio.h" #include "string.h" #include "math.h" int main() { int i,n,m,tt,t,j,k,flag,max,count[5002]; for(i=1;i<=5001;i++) { count[i]=0; } count[1]=1;count[2]=2;count[3]=2; for (i=4;i<=5001;i++) { for(j=2;j<=i/2;j++) if(i%j==0) count[i]++; count[i]+=2; } scanf("%d",&t); while (t--) { scanf("%d %d",&n,&m); max=0;tt=n; for (i=n;i<=m;i++) { if(count[i]>max) {max=count[i];tt=i;} } printf("%d/n",tt); } return 0; } 自己想歪了的反素素 就是比i之前的所有数的因素个数都大,不过更有意思 #include "stdio.h" #include "string.h" #include "math.h" int main() { int i,n,m,tt,t,j,k,flag,max,mark[5002],count[5002]; for(i=1;i<=5001;i++) { mark[i]=0;count[i]=0; } count[1]=1;count[2]=2;count[3]=2; mark[1]=0;mark[2]=1;mark[3]=0; for (i=4;i<=5001;i++) { flag=0; for(j=2;j<=i/2;j++) if(i%j==0) count[i]++; count[i]+=2; for(k=1;k<i;k++) if(count[k]>=count[i]) {flag=1;break;} if(flag==0) mark[i]=1; } // printf("%d%d/n",count[10],count[6]); scanf("%d",&t); while (t--) { scanf("%d %d",&n,&m); max=0;tt=n; for (i=n;i<=m;i++) { if(mark[i]==1) { if(count[i]>max) {max=count[i];tt=i;} } } printf("%d/n",tt); } return 0; }