You are given an array a consisting of n integers a1, ..., an. In one operation, you can choose 2 elements ai and aj in which ai is divisible by aj and transform ai to aj.
A number x is said to be divisible by a number y if x can be divided by y and the result is an exact whole number. For example, 15 is divisible by 3, because 15÷ 3 = 5 exactly, but 9 is not divisible by 2 because 9÷ 2 is 4 with 1 left over.
Your task is to find the minimum sum of the array a that can be obtained by making as many transform operations as you want. Can you?
The first line contains an integer T (1 ≤ T ≤ 100) specifying the number of test cases.
The first line of each test case contains an integer n (1 ≤ n ≤ 105), in which n is the size of array a. Then a line follows containing n integers a1, ..., an (1 ≤ ai ≤ 106), giving array a.
The sum of n overall test cases does not exceed 3 × 106.
For each test case, print a single line containing the minimum sum of the array a that can be obtained after making as many transform operations as you want.
1
5
2 2 3 6 6
11
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<map> 5 #define LL long long int 6 using namespace std; 7 int main() 8 { 9 int t,flag,flag1; 10 LL i,j,a,n,k; 11 LL ans,x; 12 map<LL,LL>mp; 13 map<LL,LL>::iterator it; 14 scanf("%d",&t); 15 while(t--) 16 { 17 mp.clear(); 18 scanf("%lld",&n); 19 for(i=0;i<n;i++) 20 { 21 scanf("%lld",&a); 22 mp[a]++; 23 } 24 flag=0; 25 ans=0; 26 for(it=mp.begin();it!=mp.end();it++) 27 { 28 k=it->first; 29 if(k==1)///出现1 30 { 31 flag=1; 32 break; 33 } 34 flag1=0; 35 x=0; 36 for(i=2;i*i<=k;i++) 37 { 38 if(k%i==0) 39 { 40 if(mp.count(i)) 41 { 42 mp[i]+=mp[k]; 43 it--; 44 mp.erase(k); 45 flag1=1; 46 break; 47 } 48 else if(mp.count(k/i)) 49 { 50 x=k/i; 51 } 52 } 53 } 54 if(!flag1) 55 { 56 if(x) 57 { 58 mp[x]+=mp[k]; 59 it--; 60 mp.erase(k); 61 } 62 } 63 } 64 if(flag) 65 { 66 printf("%lld\n",n); 67 } 68 else 69 { 70 for(it=mp.begin();it!=mp.end();it++) 71 { 72 ans+=it->second*it->first; 73 } 74 printf("%lld\n",ans); 75 } 76 } 77 return 0; 78 }