【hdu】4228 Flooring Tiles【反素数】

题意:

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


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a709743744/article/details/51550711
个人分类: ACM_数论
上一篇【poj】2481 Cows【线段树单点更新】
下一篇【hdu】2433 Travel【最短路删边】
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭