import java.io.*;
public class Main {
private int num1;
public Main(int num1){
this.num1=num1;
}
private boolean hasGCD(int num2){//求是否有除了1之外的公约数的方法
while(num1!=num2){
if(num1>num2) num1=num1-num2;
else num2=num2-num1;
}
if(num1!=1) return true;
else return false;
}
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String[] num=br.readLine().split(" ");
String[] N1M1=num[0].split("/");
String[] N2M2=num[1].split("/");
int N1=Integer.parseInt(N1M1[0]),M1=Integer.parseInt(N1M1[1]);
int N2=Integer.parseInt(N2M2[0]),M2=Integer.parseInt(N2M2[1]);
int K=Integer.parseInt(num[2]);
int min=N1*M2*K,max=N2*M1*K;//通分后分子的最小值最大值
int minK=min/(M1*M2)+1,maxK=max/(M1*M2);//约分后分子的最小值最大值
int temp;
if(minK>maxK){
temp=maxK;
maxK=minK;
minK=temp;
}//这一段是为了防止前一个分数比后面一个分数大的情况,刁钻的测试用例
String result="";
for(int i=minK;i<=maxK;i++){
if(!new Main(i).hasGCD(K)) result+=i+"/"+K+" ";//没有公约数就拼接上去,最后打印再去尾部空格
}
System.out.print(result.trim());
}
}
这段代码进去测试点2运行超时了,具体问题在哪里?
需要注意的是虽然主程序看起来只有1次循环,但是hasGCD中还嵌套了一个循环,所以速度没有想象中那么快。