题意:给你n个数,和一个数m, 问最小需要多少个数,可以让这些数乘起来是m的倍数.如果有多组,取和最小的那一组. 思路:因为m的范围到1e12,并且和取模相关,所以容易想到处理出m的约数,然后离散化一下,降低DP的第二维的复杂度,因为如果这些数的乘积不是m的约数,就没有意义了.dp[i][j]表示处理到第i个数,约数是j的最小个数.dp需要存pair,因为要求个数一样的时候和最小.可以提前把a和m求gcd以降低复杂度,注意特判m为1的情况. 代码: #include <bits/stdc++.h…