【hdu】4228 Flooring Tiles【反素数】

来源:互联网 发布:父母干涉爱情知乎 编辑:程序博客网 时间:2024/05/16 17:40
题意:

求用最少的单位正方形拼出n个不同的矩形,求所需的单位正方形数

题解:

我们知道一个数的因子个数为2*n或者2*n-1个的话就能拼出n个不同的矩形,用求反素数的方法,也就是说求最小因子数为2*n或2*n-1的数

#include<cstdio>#include<iostream>using namespace std;#define ll __int64int 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;}


0 0
原创粉丝点击