问题:'存在n个整数 , 请找出n个整数中约数最多的数,若有多个数约数个数相同,则找出这些具有相同约数的数中最小的整数。
数学题,比较每个数的约数数量,取最多约数的最小值。
请教了同学的做法,发现了自己的问题,发现约数的定义需要拓展,这题有收获。
基本做法大致不变,但在求约数数量时需要进行细节处理。
代码:
#include<bits/stdc++.h>
using namespace std;
int check(int x)
{
if (x<=1) return 0;
int y=sqrt(x),t=0;
for (int i=1;i<=y;i++)
if (x%i==0)
t++;
return t*2-(y*y==x);//借鉴学习部分。
}
int main()
{
int n,m,s,maxx,num;
while(scanf("%d",&n)!=EOF)
{
maxx=num=0;
for (int i=1;i<=n;i++)
{
scanf("%d",&m);
s=check(m);
if (s>maxx)
{
maxx=s;
num=m;
}
if (s==maxx&&m<num)
{
num=m;
}
}
printf("%d\n",num);
}
return 0;
}