【发布时间】:2021-07-01 08:16:10
【问题描述】:
有人问我一个关于找出两个数之间的公约数的问题。我能够使用“Sieve of Eratosthenes”找出逻辑方法,并且我正在干运行我的代码。但是我的代码给出了一个意想不到的输出,因为它能够找出答案。两个数之间的公约数。对于第一个输入,但对于其余部分,它以某种方式继续使用“inner loop j”的先前值,在该值处它为第一个测试用例停止;用于其他测试用例。
逻辑方法 --> 如果是素数。是给定两个数的一个因素。然后我们将检查每个素数的倍数。(使用素数[]数组并转换素数[]=0的倍数)其中一些是否是两个数字的倍数,如果是,那么我们将值增加 1。
我的问题是 - 以错误的方式使用 BufferedReader 或者代码本身存在一些错误
问题链接-> https://www.geeksforgeeks.org/common-divisors-of-two-numbers/
输入格式 输入的第一行包含一个整数 吨 表示测试用例的数量。
描述 吨 测试用例如下。
每个测试用例的第一行包含两个整数 一个 和 乙 .
输出格式 对于每个测试用例,在单独的行上输出给定对之间的公约数的数量。
约束 1 ≤ 吨 ≤ 10 ^2
1 ≤ 一个 , 乙 ≤ 10 ^9
示例 输入
3
100000 100000
12 24
747794 238336
预期输出
36
6
2
try{
long primes[]=new long[1000005];
for(int i=2;i<=100000;i++){
primes[i]=1;
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for(int k=0;k<t;k++){
String s = br.readLine();
String s2[] = s.split(" ");
long a = Long.parseLong(s2[0]);
long b = Long.parseLong(s2[1]);
long min = Math.min(a,b);
long max= Math.max(a,b);
System.out.println("Value of max = "+max);
System.out.println("Value of min = "+min);
long count=1;
for(int i=2;i*i<=min;i++){
if(primes[i]==1){
System.out.println("Value of i = "+i);
if(max%i==0 && min%i==0){
count++;
}
for(int j=i;j*i<=min;j++){
if(primes[i*j]==1){
primes[i*j]=0;
System.out.println("Value of j = "+j);
if((max%(i*j)==0) && (min%(i*j)==0)){
count++;
}
}
}
}
}
System.out.println(count);
}
}catch(Exception e){
return;
}
不同输入值的输出 -
Value of max = 24
Value of min = 12
Value of i = 2
Value of j = 2
Value of j = 3
Value of j = 4
Value of j = 5
Value of j = 6 <------
Value of i = 3
Value of j = 3
6
Value of max = 40
Value of min = 20
Value of i = 2
Value of j = 7 <------
Value of j = 8
Value of j = 9
Value of j = 10
Value of i = 3
Value of j = 5
3
Value of max = 100
Value of min = 20
Value of i = 2
Value of i = 3
2
我怎样才能找出错误?我是使用 BufferedReader 的新手?
【问题讨论】:
-
这是一个算法问题。我认为每次获得新输入时都应该将
primes数组重置为全1,就在br.readLine()之后。缓冲阅读器根本不是问题。但是,您没有正确关闭它。查找“try-with-resources”。 -
是的,我发现我的代码可以正常工作,我需要为每个测试用例创建新的 primes[],这对于非常庞大的测试用例(效率非常低)。谢谢!!
标签: java bufferedreader