费马二平方定理是指除了2这个特殊的素数,所有的素数都可以分两类:被4除余1的素数,如5,13,17,29,37,41;第二类则是被4除余3的素数如3,7,11,19,23,31.第一类素数都能表示为两个整数的平方和,第二类都不能。
———摘自百度
即,任何一个模4余1的素数可被表示成两个自然数的平方之和并且表示方法唯一。举个栗子:
一个素数 C = AA + BB,A,B皆为素数的时候,则 C就是费马平方素数。
用费马平方和定理解决 lc633 : 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。
切入点: 等式成立的充要条件为c的一切形如4k+3的质因子的幂次均为偶数.
class Solution {
//费马平方和
public boolean judgeSquareSum(int c) {
for(int i = 2, cnt = 0; i * i <=c; i++, cnt = 0){
while(c % i == 0 && ++cnt > 0) c /= i;
if(i % 4 == 3 && cnt % 2 != 0)return false;
}
return c % 4 != 3;
}
}