当前位置: 代码迷 >> 综合 >> CodeForces - 27E Number With The Given Amount Of Divisors (DFS+数学)
  详细解决方案

CodeForces - 27E Number With The Given Amount Of Divisors (DFS+数学)

热度:71   发布时间:2023-10-26 19:15:29.0

原题地址:
CodeForces-27E

题意解释:
找到拥有N个因数的数集中最小的数==找到一个拥有N个因数的数,且该数尽可能的小

题目吐槽:
没有学过数论的我一开始想的时候好难啊好难啊,百度科普的才懂。心累

解决方案:
我们知道任意一个正数都能被分解为多个素数相乘的形式,即素因数分解。
我们又知道一个数的约数的个数等于各素因数的指数加一的乘积。
已知这两个条件我们就能DFS搜索答案
提示:过程变量越界即可,总是WA的建议仿写

贴上代码:

#include<iostream>
#include<vector>
#include <limits>
using namespace std;
unsigned long long ans=numeric_limits<unsigned long long>::max();
int prime[16]={
   2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};//素数表 已够用
int n;//需要有n个约数
void core(int pos,unsigned long long k,int num){
   //搜索第 pos 个素数 已有num个约数 当前答案为 kif(num==n&&ans>k){ans=k;return;}for(int i=1;i<=63;i++){k*=prime[pos];if(k>ans||num*(i+1)>n){
   //不能过分搜索 必须加在这里return;}core(pos+1,k,num*(i+1));}
}
int main(){cin>>n;core(0,1,1);cout<<ans<<endl;return 0;
}
//Designed by wolf
  相关解决方案