题解:AT_agc047_a [AGC047A] Integer Product

· · 题解

题意

给定 n 个实数 A_1A_n,求有多少对 i,ji<j)使得 A_i \times A_j 是整数。

## 解法 显然,$A_i \times 10^9$ 是一个整数。如果 $A_i \times A_j$ 是整数,那么 $(A_i \times 10^9) \times (A_j \times 10^9)$ 后面得有 $18$ 个 $0$,也就是它是 $10^8$ 的倍数。 如果一个数是 $10^8$ 的倍数,那么它质因子 $2$ 的个数和 $5$ 的个数都 $\geq 18$。 先把每个 $A_i$ 都乘上 $10^9$,计算出它质因子 $2$ 和 $5$ 的个数。再暴力判断之前有多少个数和它乘在一起符号要求。 ```cpp #include <bits/stdc++.h> using namespace std; #define db long double #define ll long long const int maxn=2e5+5; int n; ll ans,cnt[50][20];//cnt[i][j] 表示质因子2的个数为i,5的个数为j的数的个数 db a[maxn]; int main(){ cin >> n; for(int i=1;i<=n;i++){ scanf("%Le",&a[i]); int c2=0,c5=0; ll x=round(a[i]*1e9);//round一下,不然精度会爆炸 while(!(x%2)) x/=2,c2++; while(!(x%5)) x/=5,c5++;//计算 for(int j=18-c2;j<50;j++) for(int k=18-c5;k<20;k++) ans+=cnt[j][k]; cnt[c2][c5]++; } printf("%lld\n",ans); return 0; } ```