4727: 【GESP2512五级】相等序列
内存限制:512 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述

样例输入 复制
5
10 6 35 105 42
样例输出 复制
8
提示
#include <iostream>
using namespace std;
const int N = 100010;
int num[N][20];
int n, a[N];
void calc_prime_factor(int x){
for(int i=2;i*i<=x;i++){
if(x%i==0){
int cnt=0;
while(x%i==0){
x/=i;
cnt++;
}
num[i][cnt]++;
}
}
if(x>1){
num[x][1]++;
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
calc_prime_factor(a[i]);
}
long long ans=0;
for(int i=2;i<100001;i++){
int pos = 0;
for(int j=0;j<20;j++){
pos += num[i][j];
}
num[i][0]=n-pos;
int median_exponent=0;
pos = 0;
for(int j=0;j<20;j++){
pos += num[i][j];
if(pos*2>=n){
median_exponent=j;
break;
}
}
for(int j=0;j<20;j++){
ans+=num[i][j]*abs(j-median_exponent);
}
}
printf("%lld\n",ans);
return 0;
}