• 灵渊(seals.cpp/c/pas)


    题意:p(m)的值为m的正因数个数(包括1和m本身)。

       求满足p(x)=n的x的最小值。

    对于任意正整数n,有n=p1^a1 * p2^a2 * p3^a3 * …… * pn^an;(pi为质数)
    n的因数个数(a1+1)*(a2+1)*(a3+1)*……*(an+1);

    举个例子,8=2*2*2;
    可以这样 2^1 * 3^1 * 5^1 =30;
    因为 8也可分解为这种形式: 8=2*4;2^3 * 3^1 =24;

     正确答案为 24 。

    假设 有一个数 n=b1*b2*b3*……*bi*……*bn;
    如果把它分解成 n=b1*b2*b3*……*(bj*bi)*……*b[i-1]*b[i+1]*……*bn,计算出来的结果比上式更小,
    那一定满足这个条件:
    p[n-i+1]^bi * p[n-j+1]^(bj)  >  p[n-j+1]^(bj*bi)   
    约掉p[n-j+1]^(bj) 得:
    p[n-i+1]^bi  >  p[n-j+1]^(bj*(bi - 1)) ;   
    只要满足这个条件 就可一把bj赋为 bj*bi ,把bi赋为0,表示清除;
    之后就可以了。

    代码如下

    #include<iostream>
    #include<cmath>
    #include<cstdio>
    using namespace std;
    int prime[]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,89,97,101,103,107,109,113,127,131,137,139};
    int n,i,temp,a[1000]={0},j,ans[10000][2],c[10000];
    
    double pro(int x,int y){
        double ans=x,t=x;
        int c[100],i;c[0]=0;
        while (y!=0){c[++c[0]]=y%2;y/=2;}
        for (i=c[0]-1;i>=1;i--){
            ans*=ans;
            if(c[i]==1)ans*=t;
        }
        return ans;
    }
    void clean(){
        int i,j;
        for(i=1;i<=a[0];i++)
            for(j=a[0];j>i;j--)
            if(a[i]*a[j]!=0)
                if (pro(prime[a[0]-i+1],a[i]-1)>pro(prime[a[0]-j+1],a[j]*(a[i]-1)))
                {
                   a[j]*=a[i]; a[i]=0; break;
                }
    }
    int main(){
        freopen("seals.in","r",stdin);
        freopen("seals.out","w",stdout);
        scanf("%d",&n);
        for    (i=2;i<=sqrt(n);i++)
         while (n%i==0) { a[++a[0]]=i; n/=i;}
         if (n>1)a[++a[0]]=n;
          clean();
          int tot=0,t;
           for (i=1;i<=a[0];i++)
        if (a[a[0]-i+1]>0){ 
            temp=a[a[0]-i+1]-1;
               ans[++tot][1]=prime[i];
               ans[tot][2]=temp;
        }
        for (i=1;i<tot;i++) printf("%d^%d*",ans[i][1],ans[i][2]); 
        printf("%d^%d",ans[tot][1],ans[tot][2]); 
    }
    View Code
  • 相关阅读:
    【开源】我和 JAP(JA Plus) 的故事
    justauth-spring-boot-starter V1.3.5 发布成功
    JustAuth 1.15.9 版发布,支持飞书、喜马拉雅、企业微信网页登录
    详细介绍如何自研一款"博客搬家"功能
    推荐一款自研的Java版开源博客系统OneBlog
    JavaScript常用方法
    Markdown 语法学习
    Sublime Text常用设置之个人配置
    webStorm常用设置之过滤文件夹
    HTTP详解
  • 原文地址:https://www.cnblogs.com/oxxxo/p/3826139.html
Copyright © 2020-2023  润新知