JZOJ 3775. 【NOIP2014模拟8.15】因子的排列
Description
一天,小B学习了分解质因数的相关内容。他发现,一个数的质因子可以有许多不同的排列方式,例如20=2*2*5=2*5*2=5*2*2,那么小B认为20的质因子有3种不同的排列方式。小B的同学现在有一个问题:如果一个整数的质因子的不同的排列方式的种类数为k,那么这个整数n(n>1)最小是多少?小B的同学一共有T个不同的k值,希望小B帮助这个同学解决问题。但是小B发现T太大了,并且给出的k值也相当大,因此小B向你求助。
Input
第一行,一个整数T。
接下来的T行,每行一个整数k。
Output
T行,每行一个整数,其中第i行的整数表示第i个k值对应的n的值。
Sample Input
4
1
2
3
105
Sample Output
2
6
12
720
Data Constraint
对于30%的数据,1< n<=100000;
对于全部的数据,1< n<2^63,1< k<2^63,1<=T<=1000。
Solution
考虑
x=p1a1×p2a2×…×pnanx=p1^{a1}×p2^{a2}×…×pn^{an}
它的质因子排列方式一共有:
(a1+a2+…+an)!a1!∗a2!∗...∗an!\frac{(a1+a2+…+an)!}{a1!*a2!*...*an!}
因此可以得出最终回答的数的形式一定是这样的:
2a1×3a2×5a3×7a4×…2^{a1}×3^{a2}×5^{a3}×7^{a4}×…
其中 a1≥a2≥a3≥a4…a1\geq a2\geq a3\geq a4…
我们可以搜索出所有符合这样要求的数和对应的排列方案数,
然后建一个map(C++)或者有序表,然后查询。(范围内符合条件的数一共19274个)。
为避免各种问题,我开的是 long doublelong\ double 和 unsigned long longunsigned\ long\ long 。
提示:质数最多为15个(从 2 到 47 为止)。
Code
#include<cstdio>
#include<algorithm>
#include<cctype>
using namespace std;
typedef unsigned long long ULL;
typedef long double LDB;
const int N=1e5+1;
const ULL inf=(1ULL<<63)-1;
struct data
{ULL x,y;
}f[N];
ULL f1[N],f2[N];
int tot,tot1,h[16];
bool bz[50];
template<typename T>inline T read()
{T X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
void dfs(int x,int y,int z,LDB s1,LDB s2)
{if(x>15) return;for(int i=1;i<=z;i++){s1*=(LDB)h[x];if(s1>inf) return;s2=s2*(LDB)(y+i)/i;if(s2>inf) return;f[++tot].x=s2;f[tot].y=s1;dfs(x+1,y+i,i,s1,s2);}
}
inline bool cmp(data x,data y)
{return x.x<y.x || x.x==y.x && x.y<y.y;
}
int main()
{for(int i=2;i<=47;i++){if(!bz[i]) h[++h[0]]=i;for(int j=1;j<=h[0] && i*h[j]<=47;j++){bz[i*h[j]]=true;if(i%h[j]==0) break;}}dfs(1,0,63,1,1);sort(f+1,f+1+tot,cmp);for(int i=1;i<=tot;i++)if(f[i].x!=f[i-1].x) f2[++tot1]=f[i].x,f1[tot1]=f[i].y;int T=read<int>();while(T--){ULL k=read<ULL>();int x=lower_bound(f2+1,f2+1+tot1,k)-f2;printf("%llu\n",f1[x]);}return 0;
}
JZOJ 3775. 【NOIP2014模拟8.15】因子的排列相关推荐
- jzoj 5906. 【NOIP2018模拟10.15】传送门(树形dp)
5906. [NOIP2018模拟10.15]传送门 Description 8102年,Normalgod在GLaDOS的帮助下,研制出了传送枪.但GLaDOS想把传送枪据为己有,于是把Normal ...
- [双指针|模拟] leetcode 15 三数之和
[双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...
- jzoj2702. 探险jzoj3917. 【NOIP2014模拟11.2A组】福慧双修
Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...
- 2020.03.11模拟赛15(第一题)
1.水果盛宴(fruit) 题目描述 贝茜又再一次地闯入了 Farmer John 的房子!她在厨房发现了一堆柠檬和一堆橘子(每堆都有无限多个),并且,她希望尽可能地多吃. 贝茜的有一个饱腹值上限 T ...
- jzoj5904. 【NOIP2018模拟10.15】刺客信条(并查集)
5904. [NOIP2018模拟10.15]刺客信条 Description 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受到圣殿骑士的杀害,决心成为一 ...
- JZOJ 5977. 【清华2019冬令营模拟12.15】堆
Description Input Output Sample Input 10 10 0 1 1 2 2 4 3 12 2 6 2 15 3 5 3 10 7 7 9 16 2 3 1 10 9 2 ...
- JZOJ 3809. 【NOIP2014模拟8.25】设备塔
Description 为了封印辉之环,古代塞姆利亚大陆的人民在异空间中建造了一座设备塔. 简单的说,这座设备塔是一个漂浮在异空间中的圆柱体,圆柱体两头的圆是计算核心,而侧面则是 传输信息所用的数据通 ...
- 2016.7.15 NOIP2014模拟试题解题报告(又名:方克顺和他的正余弦朋友们(
我发现自从我开始写博客以后OI成绩上升很明显啊orzzz,继续保持继续保持(然而昨晚上开夜车到十二点,感觉这次没发挥好)(下次没考好就尴尬了)(所以一定要考好!),嗯这次考得还是很不错的,也深入思考了 ...
- 【JZOJ 3823】【NOIP2014模拟9.9】遇见
Description Zyh独自一人在街上漫步.Zyh相信不久后应该就可以和她一起漫步,可是去哪里寻找那个她呢?Zyh相信每个人都有一个爱情的号码牌,这个号码牌是一个n*n的矩阵. 每个人都要在矩阵 ...
最新文章
- 项目中用到的Linux命令
- r语言导出html改不了名,请问如何进行数据框列的重命名?
- 状态机思路在程序设计中的应用
- Lumen中启用session
- 数据挖掘—朴素贝叶斯分类算法(Java实现)
- fatal error C1083: 无法打开包括文件:dxtrans.h: No such file or directory
- centos7安装cassandra
- TFS集群间数据迁移任务总结
- SUM OF SUB RECTANGLE AREAS(打表+oeis+c++大数类板子)
- coverity持续集成_美国新思科技发布2017年Coverity Scan报告
- android 设置壁纸上下显示不全,默认锁屏壁纸及锁屏壁纸被拉伸显示不全的问题...
- python跳转下一页_用Beautifulsoup转到下一页
- 上古卷轴5:重制版Skyrim Together用MO无法替换游戏菜单Menu图像LOGO的问题解决
- Excel中取值函数三剑客:LEFT、RIGHT、MID
- 电源芯片选择DC/DC还是LDO?
- 按照角度进行图片旋转
- css3的高级特效 2D
- java主程序怎样调用子程序_主程序调用子程序使用( )指令。
- python ‘//’ 取整,‘%’ 取余
- android性能测试自动化,Android App自动化性能测试探究