Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 项目编号:413_Php_Math - Fatal编程技术网

Php 项目编号:413

Php 项目编号:413,php,math,Php,Math,我正在尝试使用蛮力解决最新的Project Euler问题(我知道这不是最好的解决方案,但在我发现我错在哪里之前,我将使用它) 我不明白,我到底做错了什么。我很确定我生成的数字是正确的,但提供的数字的结果仍然是错误的: function number_split( $nb ) { GLOBAL $arr; $length = strlen( $nb ); if( $length == 1 ) return true; $count = 0;

我正在尝试使用蛮力解决最新的Project Euler问题(我知道这不是最好的解决方案,但在我发现我错在哪里之前,我将使用它)

我不明白,我到底做错了什么。我很确定我生成的数字是正确的,但提供的数字的结果仍然是错误的:

function number_split( $nb )
{
    GLOBAL $arr;
    $length = strlen( $nb );
    if( $length == 1 )
        return true;

    $count = 0;
    for( $i=1; $i<$length; $i++ ) {
        for( $j=0; $j<=$length-$i; $j++ ) {
            $temp = substr( $nb, $j, $i );
            if( $temp % $length == 0 ) {
                $count++;   
                if( $count > 1 )
                    return false;
            }
        }
    }
    return ( $count == 1 );
}

$lim = 3;
$res = 0;
$start = gmp_strval( gmp_pow( 10, $lim-1 ) );
$end = gmp_strval( gmp_pow( 10, $lim ) );
for( $i=$start; $i<$end; $i++ ) {
    $res += number_split( $i );
}
echo $res;
功能编号\u分割($nb)
{
全球$arr;
$length=strlen($nb);
如果($length==1)
返回true;
$count=0;

对于($i=1;$i您只查看3位数字,但您需要查看10^3以下的所有数字,包括1位数字和2位数字。换句话说,
$start
应该是
1


此外,您没有查看作为整个原始字符串的子字符串,因为
$i
(子字符串的长度)只运行到
$length-1

您只查看3位数字,但需要查看10^3以下的所有数字,包括1位数字和2位数字。换句话说,
$start
应该是
1


此外,您没有查看作为整个原始字符串的子字符串,因为
$i
(子字符串的长度)只运行到
$length-1

例如,5671是一个4位的一个子数字。在它的所有子字符串中,5、6、7、1、56、67、71、567、671和5671
。该示例清楚地表明,数字本身也被使用。@DainisAbols:是的,应该使用数字,但您的代码不使用它。Thanx很多,我想我已经知道了(虽然我的脚本将运行一段时间来证明这一点)。在搜索3位数字时,我在1位和2位数字上也看错了;)我想我应该解释一下暴力不起作用的原因。假设你有一个超级棒的指令集,其中有一条指令可以在一个时钟周期内测试一个子数字。在3GHz的机器上,测试10^19个数字(甚至不考虑用于执行循环或任何附加逻辑的周期)需要(10^19)/(3*10^9)=3333333.33秒=105.699年
例如,5671是一个4位数的一个子数字。在它的所有子字符串中,5、6、7、1、56、67、71、567、671和5671
。该示例清楚地表明,数字本身也被使用。@DainisAbols:是的,应该使用这个数字,但您的代码不使用它。Thanx很多,我想我知道了(虽然我的脚本将运行一段时间来证明这一点)。在搜索3位数字时,我在1位和2位数字上也看错了;)我想我应该解释一下暴力不起作用的原因。假设你有一个超级棒的指令集,其中有一条指令可以在一个时钟周期内测试一个子数字。在3GHz的机器上,测试10^19个数字(甚至不考虑用于执行循环或任何附加逻辑的周期)需要(10^19)/(3*10^9)=3333.33秒=105.699年