您的位置:首页 > 其它

hdu2521

2015-09-03 14:35 381 查看
让你求[a,b]中因子最多的数,如果有一样多的就输出最小的那个。

ps:那个s和b是因为一开始我写的是a和b然后a被数组占掉了就改成start的首字母了不是你们想的那样。

思路的话,如果全部判断是不现实的,5000开方式70点几,所以不会有超过70的单独的因子。

所以在70一下求因子即可,如果遇到另一个因子大于70的再单独加上。

整体思路就是判断1到70是不是那5000个数的因子,如果是的,在判断成对的那个因子是不是大于70。

最后搜一遍取最小的就可以了。

/*02103971 2015-09-03 14:19:56 Accepted 1002 31 MS 1604 KB GNU C++ leso312 */

#include<iostream>

#include<stdio.h>

#include<string.h>

using namespace std;

int main(){

    int a[5010];

    memset(a,0,sizeof(a));

    for(int i=1;i<=70;i++){

        for(int j=i;j<=5000;j++){

            if(j%i==0){

                a[j]++;

                if(j/i>70){

                    a[j]++;

                }

            }

        }

    }

    int s,b;

    int T;

    cin>>T;

    while(T--){

        cin>>s>>b;

        int tmp=0,k=0;

        for(int i=s;i<=b;i++){

            if(a[i]>tmp){

                tmp=a[i];

                k=i;

            }

        }

        cout<<k<<endl;

    }

    return 0;

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