题目链接:http://codeforces.com/contest/797/problem/A
题意:给你两个整数n,k,让你输出一个长度为k的序列a,所有的a[i]相乘等于n,并且a[i]>1
解析:先打个素数表,然后能拆尽量拆,拆下k-1个,剩下的是拆完以后的n
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
bool is_prime(int n)
{
if(n<2)
return false;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
return false;
}
return true;
}
int prime[maxn];
int main(void)
{
int cnt = 0;
for(int i=0;i<maxn;i++)
{
if(is_prime(i))
prime[cnt++] = i;
}
int n,k;
scanf("%d %d",&n,&k);
vector<int>ans;
for(int i=0;i<cnt;i++)
{
while(n%prime[i]==0)
{
if(k==1)
break;
ans.push_back(prime[i]);
k--;
n/=prime[i];
}
if(k==1)
break;
}
if(n==1 || k>1)
puts("-1");
else
{
for(unsigned i = 0;i<ans.size();i++)
printf("%d ",ans[i]);
printf("%d\n",n);
}
return 0;
}