题解 | #整除问题#

整除问题

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;
}


全部评论

相关推荐

03-15 14:55
已编辑
门头沟学院 golang
bg:双非学院本&nbsp;ACM银&nbsp;go选手timeline:3.1号开始暑期投递3.7号第二家公司离职顽岩科技&nbsp;ai服务中台方向&nbsp;笔试➕两轮面试,二面挂(钱真的好多😭)厦门纳克希科技&nbsp;搞AI的,一面OC猎豹移动&nbsp;搞AIGC方向&nbsp;一面OC北京七牛云&nbsp;搞AI接口方向&nbsp;一面OC上海古德猫宁&nbsp;搞AIGC方向&nbsp;二面OC上海简文&nbsp;面试撞了直接拒深圳图灵&nbsp;搞AIGC方向一面后无消息懒得问了,面试官当场反馈不错其他小厂没记,通过率80%,小厂杀手😂北京字节&nbsp;具体业务不方便透露也是AIGC后端方向2.28约面&nbsp;(不知道怎么捞的我,我也没在别的地方投过字节简历哇)3.6一面&nbsp;一小时&nbsp;半小时拷打简历(主要是AIGC部分)剩余半小时两个看代码猜结果(经典go问题)➕合并二叉树(秒a,但是造case造了10分钟哈哈)一天后约二面3.12&nbsp;二面,让我挑简历上两个亮点说,主要说的docker容器生命周期管理和raft协议使用二分法优化新任leader上任后与follower同步时间。跟面试官有共鸣,面试官还问我docker底层cpu隔离原理和是否知道虚拟显存。之后一道easy算法,(o1空间解决&nbsp;给定字符串含有{和}是否合法)秒a,之后进阶版如何用10台机加快构建,想五分钟后a出来。面试官以为45分钟面试时间,留了18分钟让我跟他随便聊,后面考了linux&nbsp;top和free的部分数据说什么意思(专业对口了只能说,但是当时没答很好)。因为当时手里有7牛云offer,跟面试官说能否快点面试,马上另外一家时间到了。10分钟后约hr面3.13,上午hr面,下午走完流程offer到手3.14腾讯技术运营约面,想直接拒😂感受:&nbsp;因为有AIGC经验所以特别受AI初创公司青睐,AIGC后端感觉竞争很小(指今年),全是简历拷打,基本没有人问我八股(八股吟唱被打断.jpeg),学的东西比较广的同时也能纵向深挖学习,也运气比较好了哈哈可能出于性格原因,没有走主流Java路线,也没有去主动跟着课写项目,项目都是自己研究和写的哈哈
烤点老白薯:你根本不是典型学院本的那种人,贵了你这能力
查看7道真题和解析
点赞 评论 收藏
分享
牛客33727151号:不是哥们我以为驾照是段子呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务