题目描述
给你一个正整数n,你需要帮小S生成一个序列,这个序列a1a2a3a4……ak,这个序列的长度为k,且要求序列a的和为n,即n=i=0kai。这个序列是严格递增的。
这个序列要有一个公约数,且这个公约数最大,即序列a的每一个数都可以整除这个公约数。
如果不存在这样的序列请输出-1。
输入
第一行一个整数T(1 ≤ T ≤ 10 ),接下来T行测试数据。
输入每行一个整数n,k(1 ≤ n, k ≤ 1010 )(多组测试用例)
输出
n个符合要求的正整数或-1。
样例输入
3
6 3
8 2
5 3
样例输出
1 2 3
2 6
-1
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n,k;
cin>>n>>k;
int gys=sqrt(n);
int ans=0,sum=0,count=(1+k)*k/2;
for(int i=1;i<=gys;i++)
{
if(n%i==0&&n/i>=count)
{
ans=i;
}
}
if(ans)
{
for(int i=1;i<k;i++)
{
cout<<ans*i<<" ";
sum+=ans*i;
}
cout<<n-sum<<endl;
//cout<<endl;
}
else
{
printf("-1\n");
}
}
}