《Ruby太慢了》php版回文数计算代码
起因见《Ruby太慢了》(http://www.oschina.net/translate/ruby-is-too-slow-for-programming-competitions) br / 和《 a href=http://www.oschina.net/code/snippet_86510_20734 rel=nofollowJava解决《Ruby太慢了》的问题/a》 br / 实现
起因见《Ruby太慢了》(http://www.oschina.net/translate/ruby-is-too-slow-for-programming-competitions)
和《 Java解决《Ruby太慢了》的问题》
实现了个php版的。不过答案似乎和Java版不一样。。。(有些数比如121,其平方根11,在百度知道是算回文数的。。)
运行结果是
1
4
9
121
484
10201
12321
14641
40804
44944
1002001
1234321
4008004
100020001
102030201
104060401
121242121
123454321
125686521
400080004
404090404
10000200001
10221412201
12102420121
12345654321
40000800004
1000002000001
1002003002001
1004006004001
1020304030201
1022325232201
1024348434201
1210024200121
1212225222121
1214428244121
1232346432321
1234567654321
4000008000004
4004009004004
页面运行时间: 26.497004985809 秒
和《 Java解决《Ruby太慢了》的问题》
实现了个php版的。不过答案似乎和Java版不一样。。。(有些数比如121,其平方根11,在百度知道是算回文数的。。)
运行结果是
1
4
9
121
484
10201
12321
14641
40804
44944
1002001
1234321
4008004
100020001
102030201
104060401
121242121
123454321
125686521
400080004
404090404
10000200001
10221412201
12102420121
12345654321
40000800004
1000002000001
1002003002001
1004006004001
1020304030201
1022325232201
1024348434201
1210024200121
1212225222121
1214428244121
1232346432321
1234567654321
4000008000004
4004009004004
页面运行时间: 26.497004985809 秒
<?php //给出两个数值X和Y,统计在这个区间里的回文数,并且要求它们的平方根也是回文数。其中 1<= x <= y < 10 14 error_reporting(E_ALL); ini_set("display_errors", 1); //避免超时 set_time_limit(0); $t1=microtime(); function isPlalindrome($num){ $str="$num"; $len=strlen($num); $k = intval($len/2) + 1;//获取中间位数 for($j=0;$j<$k;$j++){ if($str{$j}!=$str{$len-1-$j}){ return false; } } return true; } function showPlalindrome($min,$max){ //因为要计算在$min,$max间的回文数且其自身平方根也是回文数,所以相当于求一sqrt($min)~sqrt($max)间数,其平方在$min~$max间也是回文数 //$min~$max是连续正整数,所以可以这样缩小很多计算量,否则…… $start=sqrt($min); $end=sqrt($max); for($i=$start;$i<$end;$i++){ if(isPlalindrome($i) &&isPlalindrome($n=$i*$i) ){ echo $n." <br/>"; } } } showPlalindrome(1,100000000000000); $t2=microtime(); $starttime = explode(" ",$t1); $endtime = explode(" ",$t2); $totaltime = $endtime[0]-$starttime[0]+$endtime[1]-$starttime[1]; $timecost = sprintf("%s",$totaltime); echo "页面运行时间: $timecost 秒"; ?>
- 上一篇:带附件的邮件发送
- 下一篇:保存数据库查询结果到Excel
精彩图集
精彩文章