题意见标题
刚开始以为一组数据,WA一次,然后改了一下,超时了,然后又改了一下,超内存了。。。不说了,看别人做这题就没这么多事,所以就写个博客记念一下
超时代码:
#include
#include
#include
#include
#include
using namespace std;
const int MAX_N=20010;
vector is_prime;
void judge()
{
is_prime = vector(MAX_N + 1, true);
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= MAX_N; ++i)
{
if (is_prime[i])
{
for (int j = i * 2; j <= MAX_N; j += i)
{
is_prime[j] = false;
}
}
}
}
int solve(int n)
{
judge();
int ret=-1;
for(int i=2; i<=sqrt(n+0.5); i++)if(n%i==0)
{
int t=n/i;
if(is_prime[i]) ret=i;
if(t>i&&is_prime[t]) ret=t;
}
return ret;
}
int main ()
{
int T;
while(cin>>T)
{
int n[T];
int maxnum=0,maxn=0;
while(T--)
{
cin>>n[T];
if(solve(n[T])>maxn)
{
maxn=solve(n[T]);
maxnum=T;
}
}
cout<
然后看了一下网上的,发现了一个写的既简单又内啥的,下次做题之前要多动脑,原本以为题目简单咋作都行,作着作着,就不想做了/捂脸
#include<iostream>
#include<cstring>
using namespace std;
int prime[20010];
void fun()
{
for(int i=0; i<=20010; i++)
prime[i]=1;
for(int i=2; i<=20010; i++)
{
if(prime[i]==1)
{
prime[i]=i;
for(int j=2; i*j<=20010; j++)
{
prime[i*j]=i;
}
}
}
}
int main()
{
int n;
fun();
while(cin>>n)
{
int endx=-1,endy=-1;
for(int i=0; i<n; i++)
{
int x;
cin>>x;
if(prime[x]>endx)
{
endx=prime[x];
endy=x;
}
}
cout<<endy<<endl;
}
}
蓝瘦。。。