//下面这个是最先用的方法,因为学姐先讲完这个,所以懒得写代码,就将就着这个用,结果搞了老半天,还是错了,心累。。
#include<stdio.h>
#include<string.h>
int prime[5010];
bool isprime[5010];
int solve(int n)
{
memset(prime,0,sizeof(prime));
int p=0;
for(int i=0; i<=n; i++) isprime[i]=true;
isprime[0]=false;
for(int i=2; i<=n; i++)
{
if(isprime[i])
{
prime[p++]=i;
for(int j=i*2; j<=n; j+=i) isprime[j]=false;
}
}
return p;
}
int main()
{
int n,T;
int m=0;
while(~scanf("%d",&T)){
int _max=0;
while(T--)
{
scanf("%d",&n);
int ans = solve(n);
for(int i=0; i<ans; i++) // printf("%d ",prime[i]);
{
for(int j=i+1; j<ans; j++)
{
if(prime[i]*prime[j]==n&&(prime[i]>_max||prime[j]>_max))
{
_max= prime[i]>prime[j]? prime[i] : prime[j];
m=n;
}
}
}
}
printf("%d\n",m);
}
return 0;
}
//然后,反思了一下,还是自己写代码好了,不用之前的那个,可能错就错在先入为主了,然后下面这是又一次的失败尝试:
#include<stdio.h>
#include<math.h>
int _max=0;
int loc=0;
bool prime(int n)
{
int flag = true;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
flag = false ;
break;
}
}
if(flag==false) return false;
else
return true;
}
void solve(int n)
{
int m;
for(m=n-1;m>=1;m--)
{
if(prime(m))
{
//printf("%d ",m);
if(n%m==0&&m>_max)
{
_max=m;
loc=n;
return;
}
}
}
}
int main()
{
int T,n;
while(~scanf("%d",&T)){
while(T--)
{
scanf("%d",&n);
solve(n);
}
printf("%d\n",loc);
}
return 0;
}
//最后百度了一下,然后借鉴到学姐讲的知识终于过了,心累
#include<stdio.h>
#include<string.h>
int isprime[20010];
void solve()
{
memset(isprime,0,sizeof(isprime));
isprime[1]=1;
for(int i=2; i<=20001; i++)
{
if(isprime[i]==0)
{
for(int j=i; j<=20001; j+=i)
isprime[j]=i;
}
}
}
int main()
{
int n,T;
solve();
while(~scanf("%d",&T)){
int _max=-1;
int loc =0;
while(T--)
{
scanf("%d",&n);
if(isprime[n]>_max)
{
_max=isprime[n];
loc = n;
}
}
printf("%d\n",loc);
}
return 0;
}