回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>昨天我看了一段很好的(短)视频,讲的是一道数字为“33”的数学题。
链接:<a href="https://www.youtube.com/watch?v=wymmCdLdPvM" rel="nofollow">https://www.youtube.com/watch?v=wymmCdLdPvM</a></p>
<p>简而言之:许多数字可以通过:<code>a³ + b³ + c³</code>来计算</p>
<p>例如:<code>29 = 3³ + 1³ + 1³</code></p>
<p>(应该提到:<code>a</code>,<code>b</code>,<code>c</code>可以是阴性的!)你知道吗</p>
<p>所以,我想我给了这个问题一个简短的暴力尝试。没什么复杂的,只是看看我计算这些值的速度有多快。你知道吗</p>
<p>我建立了3个程序(PHP,Pyhton和C,让我们集中在PHP和C这里),这就是我得到的。。。你知道吗</p>
<p>PHP程序:</p>
<pre><code>#!/usr/bin/php5
<?php
$total = 0;
$aktstamp = time();
for ($a = -100000000000; $a <= 100000000000; $a++) {
for ($b = -100000000000; $b <= 100000000000; $b++) {
for ($c = -100000000000; $c <= 100000000000; $c++) {
$total++;
if ($a**3+$b**3+$c**3 == 33) {
echo "FOUND IT! a**3+$b**3+$c**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ((-$a)**3+$b**3+$c**3 == 33) {
echo "FOUND IT! (-a)**3+$b**3+$c**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ($a**3+(-$b)**3+$c**3 == 33) {
echo "FOUND IT! a**3+(-$b)**3+$c**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ($a**3+$b**3+(-$c)**3 == 33) {
echo "FOUND IT! a**3+$b**3+(-$c)**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ((-$a)**3+(-$b)**3+$c**3 == 33) {
echo "FOUND IT! (-a)**3+(-$b)**3+$c**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ((-$a)**3+$b**3+(-$c)**3 == 33) {
echo "FOUND IT! (-a)**3+$b**3+(-$c)**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ($a**3+(-$b)**3+(-$c)**3 == 33) {
echo "FOUND IT! a**3+(-$b)**3+(-$c)**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ($total % 10000000 == 0) {
$timetaken = time() - $aktstamp;
$calcspersec = 10000000 / $timetaken;
$date = date("d.m.Y", time());
$time = date("H:i:s", time());
echo $date . " " . $time . ": " . $a . "\n";
echo "(Calcs per sec: " . $calcspersec . ")\n";
$aktstamp = time();
}
}
}
}
?>
</code></pre>
<p>和一个C程序:</p>
<pre><code>/*
Compile with:
gcc ./33.c -o 33 -lm -O1
*/
#include <stdio.h>
#include <math.h>
#include <sys/time.h>
long long main(long long argc, char *argv[])
{
long long total = 0, a = 0, b = 0, c = 0;
int timetaken, calcspersec;
int aktstamp = (int)time(NULL);
for (a = -100000000000; a <= 100000000000; a++) {
for (b = -100000000000; b <= 100000000000; b++) {
for (c = -100000000000; c <= 100000000000; c++) {
total++;
if (pow(a, 3)+pow(b, 3)+pow(c, 3) == 33) {
printf("FOUND IT! pow(a, 3)+pow(b, 3)+pow(c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(-a, 3)+pow(b, 3)+pow(c, 3) == 33) {
printf("FOUND IT! pow(-a, 3)+pow(b, 3)+pow(c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(a, 3)+pow(-b, 3)+pow(c, 3) == 33) {
printf("FOUND IT! pow(a, 3)+pow(-b, 3)+pow(c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(a, 3)+pow(b, 3)+pow(-c, 3) == 33) {
printf("FOUND IT! pow(a, 3)+pow(b, 3)+pow(-c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(-a, 3)+pow(-b, 3)+pow(c, 3) == 33) {
printf("FOUND IT! pow(-a, 3)+pow(-b, 3)+pow(c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(-a, 3)+pow(b, 3)+pow(-c, 3) == 33) {
printf("FOUND IT! pow(-a, 3)+pow(b, 3)+pow(-c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(a, 3)+pow(-b, 3)+pow(-c, 3) == 33) {
printf("FOUND IT! pow(a, 3)+pow(-b, 3)+pow(-c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (total % 10000000 == 0) {
timetaken = (int)time(NULL) - aktstamp;
calcspersec = 10000000 / timetaken;
printf("%lld\n", a);
printf("(Calcs per sec: %u)\n", calcspersec);
aktstamp = time(NULL);
}
}
}
}
}
</code></pre>
<p>以下是速度:</p>
<pre><code>PHP: (Calcs per sec: 2000000)
Python: (Calcs per sec: 1186440)
C: (Calcs per sec: 833333)
</code></pre>
<p>PHP比Python快对我来说并不奇怪。但C究竟为什么比PHP慢那么多呢?你知道吗</p>
<p>即使是Python也比C。。。你知道吗</p>
<p>我是否有一个愚蠢的错误,或者C-pow()函数比PHPs<code>**</code>慢得多?你知道吗</p>
<p>那么,有没有人明白为什么C的速度只有PHP的一半?你知道吗</p>