zoukankan      html  css  js  c++  java
  • [SDOI2005]反素数ant

    题目描述

    对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。

    如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。

    现在给定一个数N,你能求出不超过N的最大的反质数么?

    输入输出格式

    输入格式:

    一个数N(1<=N<=2,000,000,000)。

    输出格式:

    不超过N的最大的反质数。

    输入输出样例

    输入样例#1:
    1000
    输出样例#1:
    840
    数学题
    打个表就可以发现、

    1 1 2 1*2

    4 2*2

    6 2*3

    12 4*3

    24 12*2

    36 12*3

    48 24*2

    60 12*5

    120 24*5

    180 60*3

    剩下的就是简单的dfs了

    240 120*2

    360 180*2

    720 360*2

    840 120*7

    1260 180*7

    1680 840*2

    2520 360*7

    5040 2520*2

    7560 2520*3

    10080 5040*2

    15120 5040*3

    开始看错题目写的递推水了20分后来看了题解发现当有多组解时求最小值

    每一个反质数都是某一个已求出的反质数与一个质数的乘积

    #include<cstdio>
    
    
    typedef long long LL;
    
    int prime[15] ={0,2,3,5,7,11,13,17,19,23,29,31,37,41};
    
    int n;
    int ans,maxys=0;
    
    void dfs(LL now,int ys,int cnt)
    {
        if(ys>maxys||(ys==maxys&&now<ans) )ans=now,maxys=ys;
        if(cnt==14)return;
        LL a=1;
        for(int i=0;;i++)
        {
            if(a*now>n)break;
            dfs(now*a,ys*(i+1),cnt+1);
            a*=prime[cnt];
        }
    }
    
    int main()
    {
        scanf("%d",&n);
        
        dfs(1,1,1);
        
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    关于接口测试的一些个人总结
    PMP学习考试回顾与心得
    RHCE第2课
    RHCE第1课
    kafka中对于zookeeper的理解和leader选举过程
    基于python的Selenium使用
    安装python第三方包的几种方式
    Vi命令下几种容易混淆的插入方式
    python单元测试框架unittest
    关于SQL子查询的一个问题
  • 原文地址:https://www.cnblogs.com/sssy/p/6895357.html
Copyright © 2011-2022 走看看