UVA_1575
https://vjudge.net/problem/UVA-1575
枚举答案(k)、、对k质因数分解,质数的指数为cnt[i],若n==A(tot_cnt,tot_cnt) / A(cnt[i]>1),则该ans=k
#include <cstring>
#include <cstdio> #define LL long long
inline void read(LL &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
}
const int N(1e6+);
LL n,m,k,cnt[N],num,tmp;
inline LL check(LL x)
{
num=tmp=; memset(cnt,,sizeof(cnt));
for(LL i=; i<=x; ++i)
{
if(x%i==)
{
cnt[++num]++;
for(x/=i; x%i==; )
x/=i,cnt[num]++;
}
}
for(LL i=; i<=num; ++i) tmp+=cnt[i];
LL tot=;
for(LL i=; i<=tmp; ++i) tot*=i;
for(LL i=; i<=num; ++i)
if(cnt[i]>) for(LL j=; j<=cnt[i]; ++j) tot/=j;
return tot;
}
int Presist()
{
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
read(n);
for(k=; k<N; ++k)
if(check(k)==n) break;
printf("%d\n",k);
return ;
} int Aptal=Presist();
int main(int argc,char*argv[]){;}
20分。
搜索、记录当前的方案数,合成的k,指数质数上限,要使用的质数,质数个数
从最小的质数开始枚举,可以发现,方案数与质数的指数和有关,
假设前i-1个种质数用了k个,有cnt种方案,第i种质数选a个,
那么前i种质数的方案就有cnt*c[k+a][a]
要求k最小,则小的质数指数越小越好、
#include <cstdio> typedef unsigned long long LL;
int p[]={,,,,,,,,,,,,,,,,,,,};
LL ans,n,c[][]; void DFS(LL k,LL cnt,int lim,int num,int tot)
{
if(k>ans) return ;
if(cnt==n) { ans=k; return ; }
if(num>=||cnt>n) return ;
LL tmp=;
for(int i=; i<=lim; ++i)
{
tmp*=p[num];
if(k>ans/tmp) return ;
DFS(k*tmp,cnt*c[tot+i][i],i,num+,tot+i);
}
} int Presist()
{
c[][]=;
for(int i=; i<; ++i)
{
c[i][]=;
for(int j=; j<=i; ++j)
c[i][j]=c[i-][j-]+c[i-][j];
}
for(;~scanf("%lld",&n); )
{
if(n==)
{ printf("1 2\n");continue; }
ans=(LL)<<;
DFS(,,,,);
printf("%lld %lld\n",n,ans);
}
return ;
} int Aptal=Presist();
int main(int argc,char*argv[]){;}
UVA_1575的更多相关文章
随机推荐
- spring 异常处理
1. 实现接口 HandlerExceptionResolver 捕获异常 2.@ExceptionHandler 在方法添加注解,捕获本地controller异常 3.@ControllerAdvi ...
- 贪心/思维题 UVA 11292 The Dragon of Loowater
题目传送门 /* 题意:n个头,m个士兵,问能否砍掉n个头 贪心/思维题:两个数组升序排序,用最弱的士兵砍掉当前的头 */ #include <cstdio> #include <c ...
- ACM_四数之和
四数之和 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n个不同的整数,判断能否从中选4次,4个数和刚好为m.数字可重复选取. ...
- js中将html文档写入静态界面当中
1.静态界面当中: <div id="test"></div> 2.在js当中写入 $("#test").append(html文档内容 ...
- 我要上google
我要上google 一.下载google浏览器(百度下载) 二.获取和运行xx-net 1.https://github.com/XX-net/XX-Net 2.解压下载的xx-net,运行文件夹中的 ...
- 由一维数组表示的N维数组实现(C++)
工作中,经常需要表示多维数组(如二维矩阵),常见的做法是使用T **pArr: T **pArr = new T*[M];//创建二维数组[M][N] ;i<M;i++) { pArr[i] = ...
- webview页面间的通信问题
前提 记一次多页面开发. 开发需求时会对页面刷新(reload),返回到上一页(用户返回 / history.go()) 页面间的通信 sessionStorage保存本次会话的信息,同步到新页面或上 ...
- [ CodeForces 515 D ] Drazil and Tiles
\(\\\) \(Description\) 给出一个\(N\times M\) 的网格,一些位置是障碍,其他位置是空地,求是否存在一个用 \(1\times 2\)的骨牌铺满空地的方案,以及方案是否 ...
- es6数值扩展
1. 二进制和八进制表示法 从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6 进一步明确,要使用前缀0o表示. ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0 ...
- redis源码(一):为redis添加自己的列表类型
本文档分为三大部分: 环境介绍与效果演示 redis接收命令到返回数据的执行逻辑 代码实现 文档的重点和难点在第三部分,完全阅读本文档需要读者具备基本的c语言和数据结构知识. 环境介绍和效果演示环境介 ...