貨物擺放
題目描述
小藍有一個超大的倉庫,可以擺放很多貨物。
現在,小藍有?nn?箱貨物要擺放在倉庫,每箱貨物都是規則的正方體。小藍規定了長、寬、高三個互相垂直的方向,每箱貨物的邊都必須嚴格平行于長、寬、高。
小藍希望所有的貨物最終擺成一個大的長方體。即在長、寬、高的方向上分別堆?LL、WW、HH?的貨物,滿足?n=L×W×Hn=L×W×H。
給定?nn,請問有多少種堆放貨物的方案滿足要求。
例如,當?n=4n=4?時,有以下?66?種方案:1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×11×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1。
請問,當?n=2021041820210418n=2021041820210418?(注意有?1616?位數字)時,總共有多少種方案?
提示:建議使用計算機編程解決問題。
答案提交
這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
思路:看了半天還以為是找規律的題,然后看明白之后才知道是就一個數的因數。對于一個數n,有0~的數,其中可以整除就是n的因數,而因數通常是成對出現的,所以我們可以通過篩選出可以整除的數,在用n除該數得出另一個因數。
通過Set去重,求出所有因數,再枚舉求出答案即可。
package lanqiao12;import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;public class test4 {static Scanner sc = new Scanner(System.in);public static void main(String[] args) {long t = 2021041820210418L ,ans = 0;HashSet<Long> hs = new HashSet<>();for (long i = 1; i <= Math.sqrt(t); i++) {if(t % i == 0) {hs.add(i);hs.add(t / i);}}List<Long> arr = new ArrayList<>();arr.addAll(hs);for (int i = 0; i < arr.size(); i++) {for (int j = 0; j < arr.size(); j++) {for (int k = 0; k < arr.size(); k++) {if(arr.get(i) * arr.get(j) * arr.get(k) == t)ans++;}}}System.out.println(ans);}
}