ぎゃくそすう

920 ワード

ACdreamers神ブログから転載(こちらを押してください)
定義:任意の正の整数xについて、その約数の個数をg(x)と記す.例えばg(1)=1,g(6)=4.ある正の整数xが、任意のi(0性質1:一つの反素数の質因子は必然的に2から連続する質数である.
性質2:p=2^t 1*3^t 2*5^t 3*7^t 4.....必然t 1>=t 2>=t 3>=...
例題:ZOJ 2562
nはnより小さく、因子数が最も多く、値が最も小さい数を求める.
#include <cstdio>
#include <iostream>
using namespace std;
typedef long long LL;
LL prim[]={2,3,5,7,11,13,17,19,23,29,31,37};
LL ans,res,n;
void dfs(int i,LL x,LL num,int limit)
{
    if(num>res||(num==res&&ans>x)) ans=x,res=num;
    if(i>=12) return ;
    for(int k=1;k<=limit;k++){
        if(x*prim[i]>n) break;
        x*=prim[i];
        dfs(i+1,x,num*(k+1),k);/// 
    }
}
int main()
{
    while(cin>>n){
         ans=n;res=0;
         dfs(0,1,1,50);
         cout<<ans<<endl;
    }
    return 0;
}