核心思路:答案一定来自某对下标 (i,j)(允许 i=j)对应的乘积 ai⋅aj 的正约数个数。n≤1000,可枚举全部 n2 对。为了快速求 a⋅b 的约数个数,先对每个 ai 做质因数分解,再把两数的指数对应相加,用公式 ∏(ek+1) 计算。
实现方法:对每个 ai 试除分解得到指数表;枚举所有有序对(含同下标),合并两张指数表并更新答案。同下标时相当于把指数翻倍,对应 ai2。
设 A=maxai。预处理分解为 O(nA),枚举合并在指数个数很少时接近 O(n2)。空间 O(nlogA) 量级存放因子。
产线上有 n 个待测器件,第 i 个器件的标定参数为 ai。质检员需要从参数列表中读取两次(两次可以读同一个器件),把两次读到的数相乘,希望乘积的正约数个数尽可能大。请给出这个最大值。
第一行一个整数 n(2≤n≤1000)。
第二行 n 个整数 a1,a2,…,an(1≤ai≤109)。
输出一个正整数,表示最大的正约数个数。
输入
4
12 18 7 5
输出
16
说明
读取 12 与 18,乘积 216=23⋅33,正约数个数为 16。
两次都读 12 时乘积 144 只有 15 个正约数,不如前者。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册