zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    浅谈vue对seo的影响
    JavaScript this 关键字
    css3新增特性
    JavaScript 严格模式(use strict)
    let,var,const的区别
    vue slot内部组件插槽
    正则表达式的字母意义
    Array数组对象的方法
    ArcGis for js React 初始化安装
    HTML 基础
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9676957.html
Copyright © 2011-2022 走看看