• BZOJ 1053: [HAOI2007]反素数ant


    Time Limit: 10 Sec Memory Limit: 162 MB
    Submit: 4175 Solved: 2493
    [Submit][Status][Discuss]
    Description

      对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0

    解题思路

    做这道题首先要知道一个结论,首先,x可以被分解成若干个素数的乘积,x的约数就是这些素数的指数+1的乘积,我们还要优先选取质数较小指数较大的,所以考虑dfs。每次在不超过n的前提下搜索,如果约数更多或now更小则更新答案。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #define LL long long
    
    using namespace std;
    
    LL n;
    int prime[15]={0,2,3,5,7,11,13,17,19,23,29,31,33};
    int sum;
    LL ans;
    
    inline void dfs(int k,LL now,int cnt,int last){
        if(k==13){
            if(now<=ans && cnt>=sum) {sum=cnt;ans=now;}
            if(now>=ans && cnt>sum) {sum=cnt;ans=now;}
            return;
        }
        int t=1;
        for(register int i=0;i<=last;i++){
            dfs(k+1,now*t,cnt*(i+1),i);
            t*=prime[k];
            if(now*t>n) break;
        }
    }
    
    int main(){
        scanf("%lld",&n);
        dfs(1,1,1,20);
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    MySQL 安装
    MySQL简介
    图解十大经典的机器学习算法
    基于Python预测股价
    10_通过httprequest获取跟请求相关的信息
    07_参数提交时action的写法
    08_ServletConfig介绍
    05_servlet生命周期介绍
    06_url_pattern三种写法
    03_servletHello完成
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9676957.html
Copyright © 2020-2023  润新知