首页 > 代码库 > HDU 4228
HDU 4228
很明显可以转化为反素数的题目。由于有n种不同的方式,所以,数的约数可以为2*n或者2*n-1
#include <iostream>#include <cstdio>#include <cstring>#define LL __int64using namespace std;LL p[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53}; LL n,k;void dfs(LL dep,LL tmp,LL num, LL &ans){ if(num>k) return; if(num==k){ if(tmp<ans) ans=tmp; return ; } for(LL i=1;i<=60;i++){ if(tmp*p[dep]>ans) break; tmp*=p[dep]; dfs(dep+1,tmp,num*(i+1),ans); }}int main(){ while(scanf("%I64d",&n),n){ k=2*n; LL ansi=(1LL<<60); // cout<<ansi<<endl; dfs(0,1,1,ansi); // cout<<ansi<<endl; k=2*n-1; LL ansj=(1LL<<60); dfs(0,1,1,ansj); // cout<<ansj<<endl; printf("%I64d\n",ansi<ansj?ansi:ansj); } return 0;}
HDU 4228
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。