文章
28
粉丝
0
获赞
480
访问
10.2k
#include <iostream>
#include <vector>
using namespace std;
//求最大公约数,直接记公式吧,证明有点抽象
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
int main(){
int n;
while(cin>>n){
vector<int> arr(n);
for(int i=0;i<n;i++){
cin>>arr[i];
}
int count=0;
// 枚举所有 (i,j) 且 i < j 的数对,统计 gcd(arr[i], arr[j]) == 1 的对数
for(size_t i=0;i + 1 < arr.size();i++){
for(size_t j=i+1; j < arr.size(); j++){
//若俩货都是1,公约数虽然是1,但1/1不是真分数,更不算最简了
if(arr[i]==1&&arr[j]==1)break;//直接退出
//两数不同为1时,若俩数无除1外的公约数,则是最简真分数,即最大公约数=1
//即使两数相等,由于他们的最大公约数是本身且大于1,不会被加
else if(gcd(arr[i],arr[j])==1)count++;
}
}
cout<<count<<"\n";
}
return 0;
}
登录后发布评论
不会有1的情况