zoukankan      html  css  js  c++  java
  • 【枚举+小技巧】【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();
        }
    }
    




  • 相关阅读:
    php设计模式-工厂模式(一)
    php Pthread 线程 互斥锁
    php Pthread 多线程 Worker
    PHP多进程实例
    C# this 关键字
    .NET FileStream文件流,StreamReader文本流,MemoryStream内存流几种流的实例
    深入理解Static关键字修饰符
    SQL Server 视图
    .NET初识委托
    RSA加密
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480334.html
Copyright © 2011-2022 走看看