对于一个数 ,最大的自然数 满足 ,就是找 包含质因子 的个数。
那么如果是一些数 乘起来得到 呢?
实际上也是一样的,分别统计它们包含的质因子 的个数,加起来就好了。
考虑证明:对于两个数 ,如果 分别是最大的 满足 :
那么 一定是最大的数,满足 。
至于更多的数,直接考虑数学归纳即可。
如何找一个数包含质因子 的个数?
实际上就是,每次判断它是否是偶数,如果是偶数就除掉一个 ,并给计数器加一,一直下去直到它变成奇数为止。
考虑到 远远小于 ,不用考虑开 long long。
#include<cstdio>
int init(){
char c = getchar();
int x = 0, f = 1;
for (; c < '0' || c > '9'; c = getchar())
if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar())
x = (x << 1) + (x << 3) + (c ^ 48);
return x * f;
}
void print(int x){
if (x < 0) x = -x, putchar('-');
if (x > 9) print(x / 10);
putchar(x % 10 + '0');
}
int main(){
int n = init(), ans = 0;
while (n--) {
int x = init();
while (x % 2 == 0)
x >>= 1, ++ans;
}
print(ans), putchar('\n');
}