JZOJ 3775. 【NOIP2014模拟8.15】因子的排列
生活随笔
收集整理的這篇文章主要介紹了
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×…×pnan它的質因子排列方式一共有:
(a1+a2+…+an)!a1!?a2!?...?an!因此可以得出最終回答的數的形式一定是這樣的:
2a1×3a2×5a3×7a4×…其中 a1≥a2≥a3≥a4…
我們可以搜索出所有符合這樣要求的數和對應的排列方案數,
然后建一個map(C++)或者有序表,然后查詢。(范圍內符合條件的數一共19274個)。
為避免各種問題,我開的是 long?double 和 unsigned?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; } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的JZOJ 3775. 【NOIP2014模拟8.15】因子的排列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 3786. 【NOI2015模
- 下一篇: JZOJ 3815. 【NOIP2014