【数学】最多约数问题

问题:'存在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;
}

发布了40 篇原创文章 · 获赞 0 · 访问量 701

猜你喜欢

转载自blog.csdn.net/Skynamer/article/details/101094050