448 E. Divisors

来源:互联网 发布:php手册 pdf 编辑:程序博客网 时间:2024/06/14 17:01
#include <cstdio>#include <vector>#include <algorithm>using namespace std;const int maxn = 1e5;#define LL long longvector<LL>  divi;vector<LL>  ans;void solve(LL x,LL k){    if(x==1)    {        ans.push_back(1);        return;    }    if(k==0)    {        ans.push_back(x);        return;    }    vector<LL>  divs;    for(int i=0;i<(int)divi.size()&&divi[i]<=x;++i)//重复利用之前的结果进行计算    {        if(x%divi[i]==0)        {            divs.push_back(divi[i]);        }    }    if(divs.size()==2)    {        for(int i=0;i<k&&ans.size()<maxn;++i)        {            ans.push_back(1);        }        if(ans.size()<maxn)  ans.push_back(x);    }else    {        for(int i=0;i<(int)divs.size();++i)        {            if(ans.size()<maxn)  solve(divs[i],k-1);        }    }}int main(){    LL x,k;    scanf("%lld%lld",&x,&k);    if(k==0)    {        printf("%lld\n",x);        return 0;    }    for(LL i=1;i*i<=x;++i)    {        if(x%i==0)        {            divi.push_back(i);            if(i*i!=x)  divi.push_back(x/i);        }    }    sort(divi.begin(),divi.end());    for(int i=0;i<(int)divi.size();++i)    {        if(ans.size()<maxn)            solve(divi[i],k-1);    }    for(int i=0;i<(int)ans.size();++i)        printf("%lld ",ans[i]);    puts("");    return 0;}

0 0
原创粉丝点击