朴素的剪枝思想
1.真分数分子<分母,排序之后部分遍历即可
2.直接计算是否有不等于1的公因数即可,但超时了
那就倍数直接跳过,不是倍数才判断公因数

#include<iostream>
#include<algorithm>

using namespace std;

int gcd(int a,int b){//计算最大公因数
    if(a==0) return b;
    if(b==0) return a;
    if(a>b){
        a%=b;
    } else if(a<b){
        b%=a;
    }
    return gcd(a,b);
}
bool isSimplifable(int a,int b){
	return a%b==0 || b%a==0;
} 
int main(){//习题6.5  北京大学  最简真分数 
	int n;
    int elms[600];

    
    while(cin>>n){
        if(n==0) break;
        
        for(int i=0;i<n;i++){
            cin>>elms[i];
        }
        sort(elms,elms+n);
        int counter=0;
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){//真分数一定是分母大于分子,故从i+1开始
            	if(isSimplifable(elms[i],elms[j])) continue;//倍数,直接化简为整数
				
				if(gcd(elms[i],elms[j])!=1) continue;//有公因数,当前不是最简形式
				
				//cout<<elms[i]<<" "<<elms[j]<<endl;
				counter++;
            }
        }
        cout<<counter<<endl;
    }
    
    return 0;
}