我需要得到给定数字(n)的两个因子(x,y),以便:
示例:
任何语言都可以,但最好是php。
编辑 - 澄清
我想创建一个矩形,x单位宽* y单位高,使其面积尽可能接近n。 x和y必须是整数。如果n是素数,那么n - 1的因子是可以接受的。
答案 0 :(得分:4)
您的规格不够准确。你表示你想要因素,但在你的测试案例中,4 不是因子为17
以下伪代码优先处理一个因素是 exact
for i in range(ceiling(sqrt(n)), 1){
if ( n modulo i ) == 0 {
x = i
y = round(n/i)
}
}
简单的sqrt语句可用于确保数字尽可能接近,但不保证它们是因素。
x = y = round( sqrt(n) )
答案 1 :(得分:4)
您需要决定三条规则的重要性。
可能性1:如果x * y尽可能接近n,则n = 17 => 1,17不是4,4。在这种情况下,您需要分解,并且有很多方法可以做到,但这样的代码很简单:
for(i = floor(sqrt(n)) .. 1) {
if n % i ==0 {
x = i;
y = n/x;
break;
}
}
可能性2:如果彼此靠近更重要,那么你会期望n = 18 => 4,4而不是3,6,这个代码就可以了。然而,这不是因素。
x=floor(sqrt(n))
y=floor(n/x)
如果没有更明确的规范,所写的问题是无法解决的。
编辑 ------------
现在已经编辑了规范,现在已经定义了,但你需要做可能性1,看看结果是否为素数(1是其中一个值),然后是否重复做可能性2.但是,我怀疑这就是老师把这个写成家庭作业的目的。
答案 2 :(得分:1)
我的想法(更伪,然后是php)
$root = sqrt($inputNumber);
$x = floor($root);
$y = floor($root);
if(($root - $x) > 0.5) $y++;
答案 3 :(得分:1)
$num = ...; // some number
if (is_prime($num)) // implement the is_prime() function yourself
--$num; // Subtract to get an even number, which is not a prime
$candidates = array(); // Numbers that may fit.
$top_search = $num / 2; // Limits the useless search for candidates
for($i=1; $i < $top_search; ++$i)
{
if ($num % $i == 0)
$candidates[$i] = $num / $i;
}
// Now, check the array in the middle
答案 4 :(得分:1)
我使用以下代码将所有因子写入数组。
#Application lists all factors/divisors for a number.
targetNumber=input('What number do you want the factors for?\n> ')
factors=[]
for i in range(1,targetNumber):
if targetNumber%i==0:
factors.append(i)
elif targetNumber/i==1:
factors.append(targetNumber)
break
print factors
然后我循环遍历数组以检查哪些实际可以使用。有关此算法的更多信息,请查看http://pyfon.blogspot.com.au/2012/09/list-factors-of-number-in-python.html
答案 5 :(得分:0)
这是一个PHP函数,它将两个'因子'优先于彼此接近但具有确切因素:
function weird_factors($ori) {
$sq = intval(sqrt($ori));
$start = $sq - 10;
$end = $sq + 10;
$n = 0;
for ($s = $start; $s <= $end; $s++) {
for ($t = $start; $t <= $end; $t++) {
$st = $s * $t;
if ($st <= $ori and $st > $n) {
$n = $st;
$ns = $s;
$nt = $t;
}
}
}
return array($ns, $nt);
}
答案 6 :(得分:0)
编写程序以查找任意数字的因子
<?php
if(isset($_POST['sub']))
{ $j=0;
$factor=array();
$num=$_POST['nm1'];
for($i=1;$i<=$num;$i++)
{
if($num%$i==0)
{
$j++;
$factor[$j]=$i;
}
}
}
?>
<table>
<form name="frm" method="post" action="">
<tr> <td>Number:</td> <td><input type="text" name="nm1" /></td> </tr>
<tr><td></td><td><input type="submit" name="sub" /></td>
<td><center><span>
<?php
if(isset($_POST['sub']))
{
echo "Factors are :";for($i=1;$i<=count($factor);$i++)
{ echo $factor[$i].",";
}
}
?>
</span></center></td></tr>
</form>
</table>