题意:
求用最少的单位正方形拼出n个不同的矩形,求所需的单位正方形数
题解:
我们知道一个数的因子个数为2*n或者2*n-1个的话就能拼出n个不同的矩形,用求反素数的方法,也就是说求最小因子数为2*n或2*n-1的数
#include<cstdio>
#include<iostream>
using namespace std;
#define ll __int64
int p[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
int n;
ll ans;
void dfs(int dep,int limit,ll tmp,int num)
{
if(num>n<<1) return;
if((num==2*n||num==2*n-1)&&ans>tmp){ans=tmp;return;}
for(int i=1;i<=63;i++){
if(ans/p[dep]< tmp) break;
dfs(dep+1,i,tmp*= p[dep],num*(i+1));
}
}
int main()
{
while(cin>>n&&n){
ans=1e18;
dfs(0,60,1,1);
cout<<ans<<endl;
}
return 0;
}