题目描述
有N个正整数,求这N个正整数两两之间的公共质因数之和
输入说明
第1行:正整数N(N<100)
第2行: N个空格分隔的正整数(每个元素<10000)
输出说明
输出这N个正整数两两之间的公共质因数之和,结果对1000000007取模。
输入样例
4
4 6 8 9
输出样例
11
说明:
4=22,6=23,8=222,9=3*3,所以4与6的公共质因数为2;4与8的公共质因数为2、2;4与9没有公共质因数,记为0。
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include <algorithm>
#include<string.h>
#include<set>
#include<math.h>
#define llu unsigned long long
using namespace std;
int yinshu(int x,int y)
{
if(x<y) swap(x,y);
for(int i=2;i<=y;i++)
{
if(x%i==0&&y%i==0) return i;
}
return 1;
}
int a[110];
llu s=0;
int main()
{
int n;
cin >> n ;
for(int i=0;i<n;i++)
cin >> a[i] ;
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
int x=a[i],y=a[j];
while(true)
{
int t=yinshu(x,y);
if(t!=1)
{
s=(s+t)%1000000007;
x/=t;
y/=t;
}
else break;
}
}
}
cout << s << endl ;
return 0;
}