• 【枚举+小技巧】【TOJ4115】【Find the number】


    题目大意

    找到一个最小的奇数

    约数个数为n

    结果mod10^9+7



    根据 约数个数=(p1+1)*(p2+1)............


    将n 枚举分解成连乘式。(枚举个数,dfs)


    比较大小 log 了 比较


    代码如下:

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include<algorithm>
    #include <sstream>
    #include <string>
    #define oo 0x13131313
    using namespace std;
    int n;
    int ok;
    int q[30]={0,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
    int A[30];
    int B[30];
    int ans[30];
    int anscishu=0;
    double MAX=1<<30;
    const long long mod=1000000007;
    void dfs(int nn,int k,int now,int cishu)
    {
        if(k==1)
        {
            if(nn==1) return ;
            A[1]=nn;
            double t=0;
            for(int i=1;i<=cishu;i++)
            B[i]=A[i];
            sort(B+1,B+cishu+1);
            for(int i=1;i<=cishu;i++)
        {
            t=t+(double)(B[i]-1)*(double)log(q[cishu-i+1]);
        }
                if(t<MAX)
            {
                MAX=t;
                anscishu=cishu;
                for(int i=1;i<=cishu;i++)
                {
                  ans[i]=B[i];
                }
            }
            ok=1;
            return ;
        }
        for(int i=now;i<=nn;i++)
        {
            if(nn%i==0)
            {
                A[k]=i;
                dfs(nn/i,k-1,i,cishu);
            }
        }
    }
    void solve()
    {
        MAX=1<<31-1;
        for(int i=1;i<=17;i++)
        {
            ok=0;
            dfs(n,i,2,i);
            if(ok==0) break;
        }
    }
    void print()
    {
        long long Ans=1;
        for(int i=1;i<=anscishu;i++)
        {
            for(int j=1;j<=ans[i]-1;j++)
            {
                Ans=(Ans*(long long)q[anscishu-i+1])%mod;
            }
        }
        printf("%lld
    ",Ans);
    }
    int main()
    {
       // freopen("a.in","r",stdin);
    	//freopen("a.out","w",stdout);
    	while(cin>>n)
        {
            solve();
            print();
        }
    }
    




  • 相关阅读:
    Hadoop概论
    虚拟机
    Linux的常用命令
    jsoup抓取数据
    分享JQuery动画插件Velocity.js的六种列表加载特效
    html5和css3打造一款创意404页面
    分享一款基于jquery的圆形动画按钮
    一款基于jquery和css3实现的摩天轮式分享按钮
    一款纯css3实现的环形导航菜单
    一款纯css3实现的动画加载导航
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480334.html
Copyright © 2020-2023  润新知