#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;
}
}