九度[1465]-最简真分数
题目描述:
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
输入
输入有多组,每组包含n(n<=600)和n个不同的整数,整数大于1且小于等于1000。
当n=0时,程序结束,不需要处理这组数据。
输出
每行输出最简真分数组合的个数。
样例输入
7
3 5 7 9 11 13 15
3
2 4 5
0
样例输出
17
2
解题思路:
最小公约数:辗转相除法
AC代码:
#include <cstdio>
#include <cmath>
const int maxn = 610;
int N;
int dat[maxn];
int gcd(int a, int b){
int ans = 1;
if(a < b){
int tmp = a;
a = b;
b = tmp;
}
int mod = 1;
while(a % b != 0){
mod = a % b;
a = b;
b = mod;
}
ans = b;
return ans;
}
int main(){
//freopen("C:\\Users\\Administrator\\Desktop\\test.txt", "r", stdin);
while(scanf("%d", &N) != EOF){
if(N == 0) break;
for(int i = 0; i < N; i++){
scanf("%d", &dat[i]);
}
int ans = 0;
for(int i = 0; i < N-1; i++){
for(int j = i+1; j < N; j++){
if(gcd(dat[i], dat[j]) == 1) ans++;
}
}
printf("%d\n", ans);
}
//fclose(stdin);
return 0;
}