题目描述
给你一个正整数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。
样例输入
<span style="color:#333333"><span style="color:#333333">3
6 3
8 2
5 3
</span></span>
样例输出
<span style="color:#333333"><span style="color:#333333">1 2 3
2 6
-1</span></span>
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int t=cin.nextInt(); while(t-->0){ int n=cin.nextInt(); int k=cin.nextInt(); int m=(1+k)*k/2; int ans=0,sum=0; for(int i=1;i<=(int)Math.sqrt(n);i++){ if(n%i==0&&n/i>=m){ ans=i; } } if(ans!=0){ for(int i=1;i<k;i++){ System.out.print(ans*i+" "); sum+=ans*i; } System.out.print(n-sum); System.out.println(); } else{ System.out.printf("%d\n",-1); } } cin.close(); } }