题目描述
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
输入描述:
每组包含n(n<=600)和n个不同的整数,整数大于1且小于等于1000。
输出描述:
每行输出最简真分数组合的个数。
示例1
输入
复制
7
3 5 7 9 11 13 15
3
2 4 5
0
输出
复制
17
2
import java.util.*;
import java.io.*;
import java.math.*;
import java.text.* ;
public class Main
{
public static void main(String[] args) {
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while((str = br.readLine()) != null) {
int n = Integer.parseInt(str);
String[] parts = br.readLine().split(" ");
int[] num = new int[n];
for(int i = 0; i < n; i++) {
num[i] = Integer.parseInt(parts[i]);
}
int count = 0;
for(int i = 1; i < n; i++) {
count += i;
}
for(int i = 0; i < n; i++) {
for(int j = i+1; j < n; j++) {
for(int k = 2; k <= num[i] && k <= num[j]; k++) {
if(num[i] % k == 0 && num[j] % k == 0) {
count--;
break;
}
}
}
}
System.out.println(count);
}
} catch(IOException e) {
e.printStackTrace();
}
}
}
优化之后
import java.util.*;
import java.io.*;
import java.math.*;
import java.text.* ;
public class Main
{
public static void main(String[] args) {
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while((str = br.readLine()) != null) {
int n = Integer.parseInt(str);
String[] parts = br.readLine().split(" ");
int[] num = new int[n];
for(int i = 0; i < n; i++) {
num[i] = Integer.parseInt(parts[i]);
}
int count = 0;
for(int i = 0; i < n; i++) {
for(int j = i+1; j < n; j++) {
if(check(num[i], num[j]) == 1) {
count++;
}
}
}
System.out.println(count);
}
} catch(IOException e) {
e.printStackTrace();
}
}
public static int check(int a,int b){
if(b==0) return a;
return check(b,a%b);
}
}