zoukankan      html  css  js  c++  java
  • 51nod1060:最复杂的数(DFS求反素数)

    把一个数的约数个数定义为该数的复杂程度,给出一个n,求1-n中复杂程度最高的那个数。

     
    例如:12的约数为:1 2 3 4 6 12,共6个数,所以12的复杂程度是6。如果有多个数复杂度相等,输出最小的。

    Input第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 100) 
    第2 - T + 1行:T个数,表示需要计算的n。(1 <= n <= 10^18)Output共T行,每行2个数用空格分开,第1个数是答案,第2个数是约数的数量。Sample Input

    5
    1
    10
    100
    1000
    10000

    Sample Output

    1 1
    6 4
    60 12
    840 32
    7560 64

    题意:给定N,求小于等于N的因子最多的数。

    思路:DFS即可。减枝就是,越小的数个数肯定比大的数多。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int p[]={2,3,5,7,11,13,17,19,23,29,31,37,41,47,51}; //15
    ll ans,num,N;
    void dfs(int pos,ll sum,ll cnt,int pre)
    {
        if(cnt<=num&&sum>ans) return ;
        if(cnt>num||(num==cnt&&sum<ans)) {ans=sum;num=cnt;}
        if(pos==15) return ;
        ll tmp=1;
        for(int i=0;i<=pre;i++){
            if(sum<=N/tmp) dfs(pos+1,sum*tmp,cnt*(i+1),i);
            tmp=(ll)tmp*p[pos];
        }
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--){
            scanf("%lld",&N);
            ans=num=0; dfs(0LL,1LL,1LL,10LL);
            printf("%lld %lld
    ",ans,num);
        }
        return 0;
    }
  • 相关阅读:
    数据类型基础
    变量的三个特征
    常量
    变量
    django基础 -- 2. django初识
    django基础 -- 1. 前奏 web框架的本质
    前端 --- 7 Bootstrop框架
    前端 --- 6 jQuery 初始
    前端 --- 5 BOM 和 DOM
    前端 --- 4 js
  • 原文地址:https://www.cnblogs.com/hua-dong/p/9150461.html
Copyright © 2011-2022 走看看