K-因数分解

Dream2016は猫の病院年生です。人間の文化レッスンの検査今朝の半分、質問があります:正の整数で与えられたnは、その製品がnに等しくなるように、1以上の整数K(リピート)を見つける。
入力
の最初の行は、2つの整数を含むnと、 Kは、(N-2≤≤100000 ,. 1≤K≤20である)。
出力が
有効な応答出力がない場合は-1。
そうでない場合は、任意の整数kを順次出力。彼らの製品は、nに等しくなければなりません。複数のスキームがある場合は、いずれかを出力することができます。

Input

5 1

Output

5

Input

5 2

Output

-1

Input

1024年5

Output

2 64 2 2 2

#include<cstdio>
#include<vector>
#include <iostream>
#include<queue>
#define maxn 5005
#define maxm 200005
#define ri register int
using namespace std;
int n,m,k;
int a[120];
int main()
{
 while(cin>>n>>k)
 {
  if(k==1) 
  {
   printf("%d\n",n);
   continue;
  }
  int z=0;
  while(1)
  {
   for(ri i=2;i<=n;i++)
   {
    if(n%i==0)
    {
     n/=i;
     a[z++]=i;
     break;
    }
   }
   if(z==k-1||n==1)
   break;
  }
  if(z<=k-1&&n==1)
  {
   printf("-1\n");
  }
  else
  {
   for(ri i=0;i<z;i++)
   printf("%d ",a[i]);
   printf("%d\n",n);
  }
 }
}
公開された12元の記事 ウォンの賞賛1 ビュー194

おすすめ

転載: blog.csdn.net/csx_zzh/article/details/105115604