文章

28

粉丝

0

获赞

480

访问

10.2k

头像
最简真分数 题解:实测少判1/1也能AC
P1180 北京大学/北京航空航天大学机试题
发布于2026年2月11日 21:48
阅读数 260

#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;
}

 

登录查看完整内容


登录后发布评论

2 条评论
快乐小土狗
2026年2月12日 02:41

不会有1的情况

赞(0)

牧濑 : 回复 快乐小土狗: OKOK

2026年2月12日 10:24
回复给: