【发布时间】:2015-08-28 11:47:16
【问题描述】:
从数学原理:
一个数 N 可以表示为 2 个平方和当且仅当在 N 的素数分解中,
(4k+3)形式的每个素数都出现偶数次!
我所做的是预先计算所有4k+3 数字并通过连续除法检查它的频率。
这个程序是根据约束写的:
1 < T <100
0 < N < 10 ^ 12
import java.util.Scanner;
public class TwoSquaresOrNot {
static int max = 250000;
static long[] nums = new long[max];
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int i = 0; i < max; ++i)
nums[i] = 4 * i + 3;
while (T-- > 0) {
long n = sc.nextLong();
System.out.println((canWrite(n) ? "Yes" : "No"));
}
}
private static boolean canWrite(long n) {
// TODO Auto-generated method stub
for (int i = 0; i < nums.length; ++i) {//loop through all the numbers
if (nums[i] > n)
return true;
int count = 0;
while (n % nums[i] == 0) {
count++;
n /= nums[i];
}
if (count % 2 != 0)//check for odd frequency
return false;
}
return true;
}
}
但这似乎不适用于SPOJ 网站。
我错过了什么吗?还是我做错了什么?
0 也考虑在内。
Some valid cases are:
1 = 1^2 + 0^2
8 = 2^2 + 2^2
【问题讨论】:
-
我没有测试你的代码,但你可以尝试删除中间的
System.out.print。它可能会影响网站。 -
啊啊啊!谢谢。我没看到。即使答案是错误的。
-
“0”算正方形吗?如果不是,9 是一个微不足道的反例。
-
是的,它确实算作平方数的总和。
0^2 + 3^2 = 9有效。 -
嗨,OP。如果我正确理解了定理陈述,那么我在下面突出显示的代码存在几个问题。让我知道这是否正确。
标签: java numbers number-theory