题解 | #整除问题#

整除问题

http://www.nowcoder.com/practice/8e29045de1c84d349b43fdb123ab586a

#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <map>
using namespace std;
const int MAXN=1001;
int main()
{
    int n,a,k,i,t,j,mk,f;
    //cout<<6*5*4*3*2<<endl;
    map<int,int> s1,s2;
    bool isprime[MAXN];
    vector<int> prime;
    for(i=0;i<MAXN;i++)
        isprime[i]=true;
    isprime[0]=isprime[1]=false;
    for(i=2;i<MAXN;i++)
    {
        if(!isprime[i])
            continue;
        prime.push_back(i);
        for(j=i*i;j<MAXN;j=j+i)
            isprime[j]=false;
    }
    while(cin>>n>>a)
    {
        s1.clear();
        s2.clear();
        t=a;
        for(i=0;prime[i]<=a;)
        {
            if(t%prime[i]==0)
            {
                t=t/prime[i];
                if(s1.find(prime[i])!=s1.end())
                    s1[prime[i]]++;
                else
                    s1[prime[i]]=1;
                if(t==1)
                    break;
            }
            else
                i++;
        }
        for(k=2;k<=n;k++)
        {
            t=k;
            for(i=0;prime[i]<=k;)
            {
                if(t%prime[i]==0)
                {
                    t=t/prime[i];
                    if(s2.find(prime[i])!=s2.end())
                        s2[prime[i]]++;
                    else
                        s2[prime[i]]=1;
                    if(t==1)
                        break;
                }
                else
                    i++;
            }
        }/*
        for(map<int,int>::iterator it=s2.begin();it!=s2.end();it++)
            cout<<it->first<<":"<<it->second<<' ';
        cout<<endl;
        for(map<int,int>::iterator it=s1.begin();it!=s1.end();it++)
            cout<<it->first<<":"<<it->second<<' ';
        cout<<endl;*/
        mk=0;
        f=1;
        i=1;
        while(f)
        {
            for(map<int,int>::iterator it=s1.begin();it!=s1.end();it++)
            {
                if(s2.find(it->first)!=s2.end()&&s2[it->first]>=it->second*i)
                {
                    continue;
                }
                else
                {
                    f=0;
                    break;
                }
            }
            if(f==1)
            {
                mk=i;
                i++;
            }
            else
            {
                break;
            }
        }
        cout<<mk<<endl;

    }
    return 0;
}


全部评论

相关推荐

02-21 23:34
已编辑
厦门大学 Java
神哥不得了:神哥来啦~首先你的bg的话应该算是很好的了,可以把其他删掉,不需要手搓项目呀,直接找网上的项目看懂就行,第一个项目的话虽然和JAVA没有关系,但是他的星数很多,说明你的编程能力还是很强的,我觉得第一个项目是可以放上去的,但是第二个项目的话建议还是再换一个高质量的项目,感觉如果你再把高频top 50的八股再巩固几遍,完全有机会在没有实习的情况下,从暑期实习的大厂,机会还是很大的,注意别看一些假高频八股就行
点赞 评论 收藏
分享
飞花断音:这个头像有点搞笑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务