爱玲姐姐 vor 5 Jahren
Ursprung
Commit
fb3c4b3955
1 geänderte Dateien mit 49 neuen und 0 gelöschten Zeilen
  1. 49 0
      E.java

+ 49 - 0
E.java

@@ -0,0 +1,49 @@
+package tuirngCup2019ahstuACM;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Scanner;
+/*
+要求生生的序列a1 a2 .. ak的和为n,且能整除d,d越大越好
+则可知a1 a2 .. ak每个数都可以被d整除,所以对这个等式左右约分化简,a1/d + a2/d + ... + ak/d = n/d
+n/d写做n2,a1/d ... ak/d 写做b1 b2 ... bk,可知如果想有解存在这个递增序列b,要满足 (k+1)*k/2 <= n2
+ */
+public class E {
+    public static void main(String[] args) {
+        Scanner cin = new Scanner(System.in);
+        int t = cin.nextInt();
+        while (t-->0){
+            int n = cin.nextInt(), k = cin.nextInt();
+            if(k == 1){
+                System.out.println(n);
+                continue;
+            }
+            ArrayList<Integer>factor = new ArrayList<>();
+            int s = (int)Math.sqrt(n);
+            for(int i= 1; i <= s; i++){
+                if(n % i == 0){
+                    factor.add(i);
+                }
+            }
+            Collections.reverse(factor);
+            boolean flag = false;
+            for (Integer i:factor
+                 ) {
+                int n2 = n / i;
+                if((k+1)*k /2 <= n2){//有解
+                    flag = true;
+                    int sum = 0;
+                    for(int j = 1; j < k; j++){
+                        System.out.print(j*i + " ");
+                        sum += j*i;
+                    }
+                    System.out.println(n - sum);
+                    break;
+                }
+            }
+            if (!flag){
+                System.out.println(-1);
+            }
+        }
+    }
+}