#include <stdio.h> #define N 600 int gcd(int a, int b)//欧几里得算法求最大公约数 { if(b==0) return a; else return gcd(b, a%b); } int main() { int buf[N]; int count, n; while(scanf("%d", &n)!=EOF) { for(int i=0; i<n; i++) { scanf("%d", &buf[i]); } count=0;//总计0个真分数 for(int i=0; i<n; i++)//分母 { for(int j=0; j<n; j++)//分子 { if(i==j) continue; else if(buf[i]>buf[j] && gcd(buf[i], buf[j])==1) { count++; } } } printf("%d\n", count); } return 0; }
#include <iostream> #include <algorithm> #include <vector> #include <stdio.h> #include <string> #include <map> #include <stack> #include <set> #include <queue> #include <functional> #include <math.h> #include <memory.h> #include <utility> using namespace std; int GCD(int a,int b) { if(a>b) { int temp = a; a = b; b = temp; } while(b) { int t = a%b; a = b; b = t; } return a; } int A[610]; int main() { // freopen("D:\\input.txt","r",stdin); int n; while(scanf("%d",&n)!=EOF) { if( n==0)break; set<pair<int,int> > S; for(int i = 0;i<n;i++) { scanf("%d",&A[i]); } sort(A,A+n); for(int i = 0;i<n;i++) { for(int j = i+1;j<n;j++) { if(GCD(A[i],A[j])==1) { pair<int,int> P = pair<int,int>(A[i],A[j]); S.insert(P); } } } printf("%d\n",S.size()); } }
#include<bits/stdc++.h> using namespace std; int gcd(int a,int b){ return !b?a:gcd(b,a%b); } int main(){ int n; while(cin>>n){ if(n==0)break; int num[610]; for(int i=0;i<n;i++){ cin>>num[i]; } int count=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i==j)continue; if(num[i]>num[j]&&(gcd(num[i],num[j])==1)){ count++; } } } cout<<count<<endl; } return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <vector> using namespace std; vector<int> arr; int GCD(int x, int y) { if (y == 0) { return x; } else { return GCD(y, x % y); } } int main() { int n, tmp, total; while (cin >> n) { if (n == 0) { break; } for (int i = 0; i < n; i++) { cin >> tmp; arr.push_back(tmp); } total = 0; for (int i = 0; i < arr.size(); i++) //分子 { for (int j = 0; j < arr.size(); j++) //分母 { if (arr[i] < arr[j] && GCD(arr[i], arr[j]) == 1) { total++; } } } cout << total << endl; arr.clear(); } return EXIT_SUCCESS; }
#include<iostream> (720)#include<string> #include<string.h> (845)#include<vector> #include<algorithm> (831)#include<queue> #include<cstdio> (802)#include<set> using namespace std; #define MAX 605 (5423)#define ll int #define inf 100000000 ll a[MAX]; int gcb(ll a, ll b) { if (b == 0)return a; return gcb(b, a%b); } int main() { ll n; while (cin >> n && n) { for (int i = 0; i < n; i++)cin >> a[i]; sort(a, a + n); ll res = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (gcb(a[j], a[i]) == 1)res++; } } cout << res << endl; } }
#include<stdio.h>//有公约数则不行 int gongyue(int a,int b)//找是否存在公约数 { int i,j,min,key=1; min=a<b?a:b; for(i=2;i<=min;i++) if(a%i==0&&b%i==0) {//可以同时被整除 则为公约数 key=0;break;//key=0代表有公约数 } return key; } int main() { int n,j,i,a[600],num=0; scanf("%d",&n);//输入 for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(gongyue(a[i],a[j]))//无公约数则个数加一 num++; printf("%d",num); }
package nowcoder.demo40; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int n = scanner.nextInt(); int[] arr =new int[n]; for (int i = 0; i < n; i++) { arr[i]=scanner.nextInt(); } int count=0; for (int i = 0; i < n; i++) { for (int j = i+1; j < n; j++) { if (gcd(arr[i],arr[j])==1) count++; } } System.out.println(count); } } /** * 计算最大公因数,辗转相除法 * 运行时间:120ms * * 占用内存:12932k * */ static int gcd(int a,int b){ if(b==0)return a; else return gcd(b,a%b); } }
#include<stdio.h> int calmax(int a,int b)//计算最大公约数,辗转相除法 { return b==0? a:calmax(b,a%b); } main() { int n; while(scanf("%d",&n)!=EOF&&n!=0) { int a[n]; int i,j; int count=0; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(calmax(a[j],a[i])==1) count++; } } printf("%d\n",count); } }
#include <stdio.h> int main() { short n,a[600],r,t1,t2,i,j; int sum; while(scanf("%hd",&n)!=EOF && n!=0) { sum=0; for(i=0;i<n;i++)scanf("%hd",&a[i]); for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { t1=(a[i]<a[j])?a[i]:a[j]; t2=(a[i]<a[j])?a[j]:a[i]; r=t1%t2; while(r) //辗转相除法 { t1=t2; t2=r; r=t1%t2; } if(t2==1)sum++; } } printf("%d\n",sum); } return 0; }
#include <bits/stdc++.h> using namespace std; int GCD(int a,int b) { if(b==0) return a; else return GCD(b,a%b); } int main() { int n; while(cin>>n&&n!=0) { int a[n]; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); int count=0; for(int i=0;i<n;i++) { for(int j=i;j<n;j++) { if(GCD(a[i],a[j])==1) count++; } } cout<<count<<endl; } return 0; }
//复杂度为o(n^2),貌似先排一次序会降低一下复杂度 #include<iostream> using namespace std; int zdgy(int a,int b){ while(a%b!=0){ a=a-a/b*b; int temp=a; a=b; b=temp; } return b; } int main(){ int n; while(cin>>n){ if(n==0) break; int* a=new int[n]; for(int i=0;i<n;i++) cin>>a[i]; int count=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(a[i]>a[j]&&zdgy(a[i],a[j])==1) count++; else if(a[i]<=a[j]&&zdgy(a[j],a[i])==1) count++; } } cout<<count<<endl; } return 0; }
先排序,保证小的数字在前面
真分数的分子分母最大公因数为1
计算最大公因数:
gcd(a, b) = gcd(b, a % b)
gcd(a, 0) = a
#include<algorithm>
using namespace std;
int num[600];
// gcd(a, b) = gcd(b, a % b)
// gcd(a, 0) = a
int gcd(int a, int b){
if(b == 0){
return a;
}
return gcd(b, a % b);
}
int main(){
int n;
while(cin >> n){
int count = 0;
for(int i = 0; i < n; i++){
cin >> num[i];
}
sort(num, num + n);
for(int i = 0; i < n; i++){
for(int j = i + 1; j < n; j++){
if(gcd(num[i], num[j]) == 1){
count++;
}
}
}
cout << count << endl;
}
return 0;
}
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1000; int num[maxn] = {0}; // 用于判断 r1 / r2 是否是最简真分数,如果是则他们的最大公约数为 1 ,且分子小于分母 int solve(int r1, int r2) { int tmp; while(r1 != 0) { tmp = r1; r1 = r2 % r1; r2 = tmp; } if(r2 == 1) { return 1; } else { return 0; } } int main() { int n; while(cin >> n) { if(n == 0) { break; } for(int i = 0; i < n; ++i) { cin >> num[i]; } // 真分数一定是 分子小于分母 则先从小到大排序 sort(num, num+n); int count = 0; // 计数器 for(int i = 0; i < n-1; ++i) { for(int j = i+1; j < n; ++j) { if(solve(num[i],num[j]) == 1) { ++count; } } } cout << count << endl; } return 0; }
#include <bits/stdc++.h> using namespace std; int gcd(int a,int b){ if(b==0)return a; else return gcd(b,a%b); } int main(){ int n; while(cin>>n){ if(n==0) break; int temp[n]; for(int i=0;i<n;i++){ cin>>temp[i]; } int sum = 0; for(int i=0;i<n;i++){ // 分子 for(int j=0;j<n;j++){// 分母 if(temp[i]>temp[j]) continue; // 分子大于分母,假分数,下一个 else{ int d = gcd(temp[i],temp[j]); if(d==1) sum++; } } } cout<<sum<<endl; } }