最简真分数

GitHub跳转原题关系图返回列表

题意与原解析均从本地 OpenJudge 缓存迁移。

OJ: noi_openjudge

题目 ID: ch0201-3526

难度:未知

标签:

日期: 2026-07-30 23:01

题意

完整题面见同目录的 problem.md

思路

代码

cpp
#include <bits/stdc++.h>
using namespace std;

int n;
int a[605];

bool vis[1005][1005] = {0};
int gcd(int a,int b){
    if( b == 0) return  a;
    return gcd( b , a %b);
}

int main(){
    scanf("%d",&n);
    int i,j,k;
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    sort(a+1,a+n+1);
    int cnt=0;
    
    for(i=1;i<n;i++){
        for(j=i+1 ;j<=n;j++){
            if( a[j] > a[i] ){
                //printf("%d %d\n",a[i],a[j]);
                int mod = gcd(a[i],a[j]);

                int up = a[i];
                int down= a[j];
                if( mod != 1){
                    continue;
                }
                

                if(vis[up][down] ==0 ){
                    cnt++;
                    //printf("==>%d %d =%d\n",a[i],a[j],cnt);
                    vis[up][down] = 1;
                }
            }
        }
    }
    printf("%d\n",cnt);
    return 0;
}

复杂度

总结