ソース:
説明:
K - 正の整数のP因数 Nは、書き込みする の和としてのN のP番目のパワー Kpositive整数。あなたが見つけて、プログラムを書くことになっている K - のP分解 任意の正の整数のNを N、 Kおよび P.
入力仕様:
各入力ファイルが一列に与える一つのテストケースが含まれている3つの正の整数 N(≤)、 K(≤)と P(1)。行中の数字は、スペースで区切られます。
出力仕様:
各場合について、溶液が存在する場合、形式に出力:
N = n[1]^P + ... n[K]^P
ここで、
n[i]
(i
= 1、...、K
)であるi
番目の因子。すべての要因は非増加順に印刷されなければなりません。注意:ソリューションは、一意ではないかもしれません。例えば、169の5-2分解は、次のような9つの溶液有する 1または 1以上。あなたは、出力要因の最大の和と一つにしなければなりません。タイがある場合、最大の因子配列が選択されなければならない-シーケンスは{ 、}よりも大きいと言われている{ 、}が存在する場合 1ように 、I = B I のために 、私は< Lと L > bはL 。
何の解決策、シンプルな出力がない場合
Impossible
。
サンプル入力1:
169 5 2
サンプル出力1:
169 = 6^2 + 6^2 + 6^2 + 6^2 + 5^2
サンプル入力2:
169 167 3
サンプル出力2:
Impossible
キー:
注意:
- 異なる精度異なるコンパイラ環境POW機能、データのPATランは右ですが、私は、コンピュータ上で走っ間違っている、あなた自身を書くことができます
コード:
1 / * 2 時間:2019年7月2日午後06時55分08秒 。3 問題:#整数因数分解PAT_A1103 。4 AC:18時08分 。5 。6 タイトル効果: 7が Pの整数Nは、Kの式により指数に分解されますそして 8 入力: 9 。起因式K、インデックスの数に正の整数N <= 400、1 <P <= 7 10 出力: 11 本当の順に、 12 ない場合のみ、塩基価と最大値のセット印刷 13を 一意でない場合印刷辞書配列のより大きいセットは、 14の 15の 基本的な考え方: 16 深さ優先探索第二層K溶液に時間が存在する場合、次いで、最適解を選択する 。17 * / 18であるの#include <cstdioを> 19の#include <ベクトル> 20である# <cmath>などが 21である 使用して 名前空間STD; 22 int型 K、N、P、optValue = 0 。 23ベクトル< int型 > FAC、一時、ANS; 24 25 ボイド DFS(int型のインデックス、int型 numK、int型の和、INT sumFac) 26 { 27の 場合(numK == K &&和== N && sumFac> optValue) 28 { 29 optValue = sumFac。 30の ANS = TEMP。 31 } 32 であれば(numK> = K ||和> = N ||インデックス<= 0 ) 33 返します。 34 temp.push_back(インデックス) 35 DFS(インデックス、numK + 1、和+ FAC [インデックス]、sumFac + 指数); 36 temp.pop_back()。 37 DFS(index- 1 、numK、和、sumFac)。 38 } 39 40 のint main()の 41 { 42 の#ifdef ONLINE_JUDGE 43 の#else 44 freopenは(" Test.txtを"、" R " 、STDIN)。 45 #endifの // ONLINE_JUDGE 46 47 のscanf(" %D%D%D "、&N&K&P)。 48 のためには、(int型 i = 0 ; POW(I、P)<= N; iは++ ){ 49 fac.push_back(POW(I、P))。 50 } 51 DFS(fac.size() - 1、0、0、0 ); 52 であれば(ans.size()== 0 ) 53 のprintf(" 不可" )。 54 他の 55 { 56 のprintf(" %D =%のD ^%のD "、nは、ANS [ 0 ]、P)。 57 のためには、(int型 iは= 1 ; iはans.size()<; iは++ ) 58 のprintf(" +%のD ^%Dを" 、ANS [i]は、P)。 59 } 60 61 戻り 0 ; 62 }