Java &引用;方程式;对黑客银行的挑战
我在hackerrank.com上的“方程式”挑战中遇到了一些测试用例的问题。 这就是问题所在:。Java &引用;方程式;对黑客银行的挑战,java,Java,我在hackerrank.com上的“方程式”挑战中遇到了一些测试用例的问题。 这就是问题所在:。 我很确定我理解逻辑,但是我的程序中仍然有一个bug(或者我的逻辑中有一个缺陷) 公共类解决方案 { 公共静态无效标记(布尔值[]a,int i,int n)//sieve util { int num=i*2; 调用legendre(13139946349)时(num),变量k溢出 将此变量的类型从int更改为long 顺便说一句,您可以通过在循环中添加断言来轻松跟踪它: if (k <
我很确定我理解逻辑,但是我的程序中仍然有一个bug(或者我的逻辑中有一个缺陷)
公共类解决方案
{
公共静态无效标记(布尔值[]a,int i,int n)//sieve util
{
int num=i*2;
调用legendre(13139946349)
时(num),变量k
溢出
将此变量的类型从int
更改为long
顺便说一句,您可以通过在循环中添加断言来轻松跟踪它:
if (k < 0)
System.out.println(k);
if(k<0)
系统输出println(k);
更改为long不起作用,我刚刚尝试过。您需要使用biginger
查看我的解决方案
public class Solutions {
static boolean isPrime(int p) {
boolean num = false;
if (p == 2 || p == 3) {
return true;
}
for (int j = 2; j <= Math.sqrt(p); j++) {
if (p % j == 0) {
num = false;
break;
} else {
num = true;
}
}
return num;
}
public static void main(String[] args) {
long mod = 1000007;
int n;
Scanner input = new Scanner(System.in);
n = input.nextInt();
BigInteger bresult = BigInteger.ONE;
long x = n;
for (int i = 2; i <= x; i++) {
if (isPrime(i)) {
int k = 1;
long power = 0;
while ((Math.pow(i, k) <= x)) {
power += n / Math.pow(i, k);
k++;
}
bresult = bresult.multiply(BigInteger.valueOf(power * 2 + 1));
}
}
System.out.println(bresult.mod(BigInteger.valueOf(mod)));
}
}
公共类解决方案{
静态布尔isPrime(int p){
布尔数=假;
如果(p==2 | | p==3){
返回true;
}
对于(int j=2;j)您是否有可能出现溢出?如果您更改int(可能变大的int)很长时间以来,你还看到类似的结果吗?哇。我真的不敢相信这是有效的。我做了这么多数学编程挑战,我一直在思考溢出问题,但我真的认为我在这里是安全的。感谢你对meNo问题的容忍。我很高兴它真的那么简单,我没有比atm机更多的脑力。
public class Solutions {
static boolean isPrime(int p) {
boolean num = false;
if (p == 2 || p == 3) {
return true;
}
for (int j = 2; j <= Math.sqrt(p); j++) {
if (p % j == 0) {
num = false;
break;
} else {
num = true;
}
}
return num;
}
public static void main(String[] args) {
long mod = 1000007;
int n;
Scanner input = new Scanner(System.in);
n = input.nextInt();
BigInteger bresult = BigInteger.ONE;
long x = n;
for (int i = 2; i <= x; i++) {
if (isPrime(i)) {
int k = 1;
long power = 0;
while ((Math.pow(i, k) <= x)) {
power += n / Math.pow(i, k);
k++;
}
bresult = bresult.multiply(BigInteger.valueOf(power * 2 + 1));
}
}
System.out.println(bresult.mod(BigInteger.valueOf(mod)));
}
}