【发布时间】:2022-11-25 21:15:22
【问题描述】:
我正在尝试编写一个程序,让我知道一个数的奇数是否大于一。设 n 为数字,x 为除数。 x%2!=0 且 x>1; 代码:
import java.util.Scanner;
public class Simple1{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
long n;
for(int i=0; i<t; i++) {
n=sc.nextLong();
if(n<3)System.out.println("NO");
else {
if(n%2!=0)System.out.println("YES");
else {
int ans=0;
for(long j=3; j<=n/2; j+=2) {
if(n%j==0) {
ans=1;
break;
}
}
if(ans==1)System.out.println("YES");
else System.out.println("NO");
}
}
}
}
}
这个java代码工作正常。但它不适用于特定输入.. 那就是 n = 1099511627776。如果我将最后一位数字更改为 6 以外的任何整数,那么它可以正常工作并提供输出。甚至比这更大的数字也有效。但是只有这个数字 n=1099511627776,当我将它输入到我的程序中时,没有终止发生也没有输出。帮我弄清楚这里发生了什么。
【问题讨论】:
-
数字
1099511627776是 2 的 40 次方。这意味着它必须检查整个大 for 循环以找到没有奇怪的因素。如果你想这样做,你必须等待更长的时间。 -
您可以在循环中添加一些输出以查看它正在检查的内容。您会发现它只需要很长时间,因为您要求它检查大量的模运算。
-
为了使其(更快)更快,您可以将
n除以 2,直到得到奇数。
标签: java