变换

it2025-01-08  7

思路: 最佳玄学算法!!!

因为若将所有数(除那个选择的数)都乘一个正整数其实是在做无用功!!! 所以我们应当乘一个正整数的倒数!!!就相当于除一个数!!!

1.找出所有数的“GCD”,相除后,算出所有数的所有质因数,并全部相加,再输出个数!

代码:

#include <algorithm> #include <iostream> #include <cstring> #include <vector> #include <cstdio> #include <queue> #include <cmath> #define LL long long using namespace std; const LL N=1e6+100,mod=1e9+7; LL n,cnt,ans,num,a[N]; LL gcd (LL a,LL b) { if (a%b==0) return b; return gcd (b,a%b); } int main () { scanf ("%lld",&n); for (int i=1;i<=n;i++) { scanf ("%lld",&a[i]); ans=i==1?a[i]:gcd (a[i],ans); //算出最大公约数!!! } for (int i=1;i<=n;i++) { a[i]/=ans; for (int j=2;j*j<=a[i];j++) //分解质因数!!! { while (a[i]%j==0) { num++; a[i]/=j; } } if (a[i]>1) num++; } printf ("%lld",num); return 0; }

可行性: 1:最大"GCD"其实是可以忽略的,因为最后要将所有数 都变为一个相同的值,所以我们就可以将它去掉不看。 2.去除最大"GCD"后每个数就是没什么联系的了,所以 我们之后的每一次操作都会去除一个数的*/

最新回复(0)