首页 > 编程知识 正文

最大公约数辗转相除法,真最简真分数定义

时间:2023-05-03 17:33:11 阅读:266023 作者:3580

题目

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

样例

输入
7
3 5 7 9 11 13 15
输出
17

分析

最简真分数:分子比分母小,且两者的最大公约数为1
求最大公约数用辗转相除法:
让m>n r = m

while r>0:
r = m%n
m = n
n = r

return m
0 < a < b时,a%b = a

代码 #include<cstdio>#include<iostream>#include<vector>#include<algorithm>#include<string>#include<cctype>#include<cmath>using namespace std;const int maxx = 603;int arr[maxx];int gcd(int x1, int x2){ if (x1 < x2)swap(x1, x2); if (x1 == x2)return x1; int temp = x1; while (temp>0) { temp = x1 % x2; x1 = x2; x2 = temp; } return x1;}int main(){ int n; while (~scanf("%d", &n)) { for (int i = 0; i < n; i++) scanf("%d", &arr[i]); int ans = 0; for(int i = 0;i<n;i++) for(int j = 0;j<n;j++) if (arr[i] < arr[j]) { int g = gcd(arr[i], arr[j]); if (g == 1)ans++; } printf("%dn", ans); }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。