您的位置:首页 > 其它

SZU:A25 Favorite Number

2013-07-17 21:11 120 查看

JudgeInfo

MemoryLimit:32768KB

CaseTimeLimit:10000MS

TimeLimit:10000MS

Judger:NumberOnlyJudger

Description

FrogFranklikes30morethanlikes40,yethelikes12and39equally.Thisisbecausehelikesnumbersthathavealotofdifferentprimefactors.Forexample,30have3primefactors(2,3and5)and40have2(2and5)only.Aprimenumberisanumberthatcanbedividedevenlyonlybyitselfand1.

Task

Youaregivenalistofnumbers,findoutwhichofthenumbersFranklikesmost.Iftherearemorethanonesolutions,outputthesmallest.

Input

Thefirstlineofinputcontains

,thenumberoftestcases.Firstlineofeachtestcasecontainsaintegers

.ThefollowinglinecontainsNpositiveintegers,allofthemarenotgreaterthan100,000.

Output

Foreachtestcase,printalinecontainsthesolution.

SampleInput

2
10
3579111315171921
11
2468101339105200201143


SampleOutput

15
105

解题思路:素数筛选

算法fromdd:


#include<stdio.h>
#include<string.h>
#include<math.h>

#defineN100000
#defineyes'1'
#defineno'0'
charflag[N+1];

voidis_prime(intn)
{
inti,j;
memset(flag,yes,sizeof(flag));
flag[0]=flag[1]=no;
intlen=sqrt(n)+1;
for(i=2;i<len;i++)
{
if(flag[i]==no)continue;
for(j=i+i;j<=n;j+=i)
flag[j]=no;
}
}

intmain(void)
{
intn;
///findtheprimesfrom1ton(n<=N)
scanf("%d",&n);
is_prime(n);
for(inti=1;i<=n;i++)
if(flag[i]==yes)
printf("%8d",i);
printf("\n");
return0;
}


解题:

#include<stdio.h>
#include<string.h>
#include<math.h>

#defineN100050
#defineyes'1'
#defineno'0'
charflag
;

voidis_prime(intn)
{
inti,j;
memset(flag,yes,sizeof(flag));
flag[0]=flag[1]=no;
intlen=sqrt(n)+1;
for(i=2;i<len;i++)
{
if(flag[i]==no)continue;
for(j=i+i;j<=n;j+=i)
flag[j]=no;
}
}

intmain()
{
intn;
intcount;
intt,i,k,num;
intmax;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
max=0;
for(i=0;i<n;++i){
count=0;
scanf("%d",&num);

is_prime(num);
for(i=1;i<=num;i++)
if(flag[i]==yes){
if(num%i==0)
count++;
}
if(count>max)
{
max=count;
k=num;
}
if(count==max)
{
if(k>num)k=num;
}
}
printf("%d\n",k);
}
return0;
}


Winifred:

#include<stdio.h>
#include<string.h>
boolf[100025];
intT,p[100025];

voidgetprime()
{
inti,j;
memset(f,true,sizeof(f));
f[1]=false;
for(i=2;i<=100000;i++)
if(f[i])
{
for(j=i+i;j<=100000;j+=i)f[j]=false;
}
T=0;
for(i=2;i<=100000;i++)
if(f[i])
{
T++;
p[T]=i;
}
}

intgetdivnum(intx)
{
intans=0,tmp=x;
for(inti=1;i<=T;i++)
{
if(tmp%p[i]==0)
{
ans++;
while(tmp%p[i]==0)tmp/=p[i];
}
if(p[i]>tmp)break;
}
returnans;
}
intmain()
{
getprime();
intcas;
scanf("%d",&cas);
while(cas--)
{
intn;
scanf("%d",&n);
intMax=0,u;
for(inti=1;i<=n;i++)
{
intx;
scanf("%d",&x);
intt=getdivnum(x);
if(t>Max)
{
Max=t;
u=x;
}
elseif(t==Max)
{
if(u>x)u=x;
}
}
printf("%d\n",u);
}
getprime();
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: