关闭

【hdu】4228 Flooring Tiles【反素数】

139人阅读 评论(0) 收藏 举报
分类:
题意:

求用最少的单位正方形拼出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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27596次
    • 积分:1503
    • 等级:
    • 排名:千里之外
    • 原创:132篇
    • 转载:4篇
    • 译文:0篇
    • 评论:3条