最简真分数

*爱你&永不变心* 提交于 2020-02-07 20:00:19

题目描述
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。

输入描述:
每组包含n(n<=600)和n个不同的整数,整数大于1且小于等于1000。

输出描述:
每行输出最简真分数组合的个数。

示例1
输入
7
3 5 7 9 11 13 15
3
2 4 5
0
输出
17
2

题目解析:首先了解什么是真分数,真分数,分子小于分母的分数 ,分子分母没有公约数。所以只用计算两个方面,前者小于后者,前者与后者不能约分。

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<map>
#include<set>
#include<vector>
const int N = 600;

using namespace std;
//真分数,分子小于分母的分数 ,分子分母没有公约数
int divisor(int a,int b){   //计算是否有公因子 
	int index = -1;
	if(b % a != 0){
		for(int i = 2 ; i * i <= a; i++){   //求的是不包含自身的约数 
			if(a % i == 0){
				if(b % i == 0){
					index = i;
					break;
				}
			}
		}
	}else{
		return 1;
	}

	if(index != -1){
		return 1;
	}else{
		return 0;
	}
}
int main()
{
	int count,number[N];
	set<int> st;
	while(scanf("%d",&count) != 0){
		for(int i = 0 ; i < count ; i++ ){
			cin >> number[i];
		}
		sort(number , number+ count);
		int sum = 0;
		for(int i = 0 ; i < count ; i ++){
			for(int j = 0 ; j < count ; j++){
				if(number[i] < number[j]  && divisor(number[i] , number[j]) == 0){
					sum++;
				}
			}
		}
		cout << sum <<endl;
	}
    return 0;
}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!