日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51nod 1435 位数阶乘 (手动计算)

發布時間:2024/4/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod 1435 位数阶乘 (手动计算) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

1435 位數階乘
題目來源: CodeForces
基準時間限制:1 秒 空間限制:131072 KB 分值: 40 難度:4級算法題
X是一個n位數的正整數 (x=a0a1…an?1)

現在定義 F(x)=∏i=0n?1(ai!) , 比如F(135)=1!*3!*5!=720.

我們給定一個n位數的整數X(至少有一位數大于1,X中可能有前導0),

然后我們去找一個正整數(s)符合以下條件:

1.這個數盡可能大,

2.這個數中不能含有數字0或1。

3.F(s)=F(x)

Input
每個測試數據輸入共2行。
第一行給出一個n,表示x為中數字的個數。(1<=n<=15)
第二行給出n位數的正整數X(X中至少有一位數大于1)
Output
共一行,表示符合上述條件的最大值。
Input示例
4
1234
Output示例33222

這題純手動解決,以為有規律,發現數字大了就沒規律了。

解法:把15個9以內的階乘分解成盡量多的2-9的階乘。然后從大的數開始輸出。
    這題不管怎么分都是要從最大的素數因子開始的,要不然就不能分解。
   

    我們能夠想到的是2,3,5,7是沒法再分小了的。 (想想7!怎么分,第一個7就沒法分)
    
    所以只有4,6,8,9四個數字的階乘要分,
    4分為:1個3!和2個2!    6分為:1個5!和1個3!
    8分為:1個7!和3個2!
    9分為:1個7!和2個3!和1個2!

這題就是這么暴力。

我剛開始以為任何大于1的自然數的階乘都可以分成 任意個質數階乘的積。
后來找到了反例(100! = 97!*98*99*100),分出來的3個數字沒法拼成素數階乘的積。

代碼:

#include <iostream> #include <algorithm> #include <map> #include <vector> #include <set> #include <math.h> using namespace std; typedef long long ll; #define INF 2147483647//num[i] 表示 i! 的數量 int num[11]; int main(){int n;string s;cin >> n >> s;for(int i = 0;s[i]; i++){if(s[i] == '9'){//9!可以分為 7!* (2*3!) * 2!。 num[7]++; num[3] += 2; num[2]++; }else if(s[i] == '8'){//8! 可以分為 7!* (3*2!) num[7]++; num[2] += 3;}else if(s[i] == '6'){//6! 可以分為 5! * 3! num[5]++; num[3]++;}else if(s[i] == '4'){//4! 可以分為3! * (2*2!) num[3]++; num[2] += 2;}else{//質數的階乘不可分 num[s[i]-'0']++;}}for(int i = 9;i >= 2; i--){ while(num[i]--) cout << i;}cout << endl;return 0; }

總結

以上是生活随笔為你收集整理的51nod 1435 位数阶乘 (手动计算)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。