Algorithm 如何检查给定数字N,N^2的a是否可以表示为两个非零整数的平方和?
给定一个数N,我如何知道N^2是否可以表示为两个非零整数的平方和。例如,如果N=10,则10^2可以表示为(6^2)+(8^2)。我读过这样的数字N可以表示为4k+1,但即使是9也符合这个表达式,但81不能表示为两个整数的平方和。正确的方法是什么?听起来像毕达哥拉斯计算器 这个链接可以帮助你,所有毕达哥拉斯的三元组Algorithm 如何检查给定数字N,N^2的a是否可以表示为两个非零整数的平方和?,algorithm,math,Algorithm,Math,给定一个数N,我如何知道N^2是否可以表示为两个非零整数的平方和。例如,如果N=10,则10^2可以表示为(6^2)+(8^2)。我读过这样的数字N可以表示为4k+1,但即使是9也符合这个表达式,但81不能表示为两个整数的平方和。正确的方法是什么?听起来像毕达哥拉斯计算器 这个链接可以帮助你,所有毕达哥拉斯的三元组 您想要的数字是勾股三元组的斜边(“c”值),OEIS中的系列。那里的评论指出,一个数字是斜边,当且仅当它至少可被一个4k+1形式的素数整除。所以你可以通过得到一个数的素因子分解来检查
您想要的数字是勾股三元组的斜边(“c”值),OEIS中的系列。那里的评论指出,一个数字是斜边,当且仅当它至少可被一个4k+1形式的素数整除。所以你可以通过得到一个数的素因子分解来检查它是否是一个斜边,然后看看这些素数被4除后是否还有1的余数 在您的示例中,81不合格,因为它唯一的主因子是3。81可被9整除,但9不是素数。使用此对象,如果在运行checkPi()方法a、b和c后,如果“a”和“b”不等于null,则“c”是您的数字
<?php
Class PithgorasTriplesDetector {
/**
*
* @var type
*/
private $a, $b, $c;
/**
*
* @var type
*/
private $check_numbers = array();
/**
*
* @param type $c
*/
public function __construct($c) {
$this->c = $c;
$this->check_numbers = range(1, $this->c);
}
/**
*
* @return boolean
*/
public function checkPi() {
$counter = count($this->check_numbers);
$c_pow = pow(2, $this->c);
for ($index = $counter - 1; $index >= 0; $index--) {
for ($index2 = $index; $index2 > 0; $index2--) {
if ($this->calcAB($index, $index2) == $c_pow) {
$this->a = $index;
$this->b = $index2;
return true;
}
if ($this->calcAB($index, $index2) > $c_pow) {
continue;
} else {
return false;
}
}
}
}
/**
*
* @param type $a
* @param type $b
* @return type
*/
public function calcAB($a, $b) {
return pow(2, $a) + pow(2, $b);
}
function getA() {
return $this->a;
}
function getB() {
return $this->b;
}
function getC() {
return $this->c;
}
function setA($a) {
$this->a = $a;
}
function setB($b) {
$this->b = $b;
}
function setC($c) {
$this->c = $c;
}
}
Er,81=9²+0²……但是4k+1是关于数字本身,所以9的答案应该是3²+0²。他需要大于0。一个封闭的副本:@LưuVĩnhPhúc实际上不是一个副本,因为“n^2是两个平方的和”允许“n是两个平方的和”的优化不:)我已经看过了,但它不起作用,因为N可能大到10^6