Heim > Backend-Entwicklung > PHP-Tutorial > Ermitteln Sie mit PHP die Summe der größten ungeraden Teiler

Ermitteln Sie mit PHP die Summe der größten ungeraden Teiler

青灯夜游
Freigeben: 2023-04-08 14:10:01
nach vorne
2994 Leute haben es durchsucht

In diesem Artikel erfahren Sie, wie Sie mit PHP die Summe der größten ungeraden Teiler ermitteln. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Ermitteln Sie mit PHP die Summe der größten ungeraden Teiler

Xiao Yi ist ein Enthusiast der Zahlentheorie und interessiert sich sehr für die ungeraden Teiler einer Zahl. Eines Tages stieß Xiaoyi auf ein solches Problem: Definieren Sie die Funktion f (x) als den größten ungeraden Teiler von x, und x ist eine positive ganze Zahl. Zum Beispiel: f(44) = 11.

Wenn wir nun ein N haben, müssen wir f(1) + f(2) + f(3) finden…….f(N)

Zum Beispiel: N = 7

f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) = 1 + 1 + 3 + 1 + 5 + 3 + 7 = 21

Xiao Yi ist bei der Berechnung dieses Problems auf Schwierigkeiten gestoßen und möchte, dass Sie einen Algorithmus entwerfen, der ihm hilft.

<?php
$num = trim(fgets(STDIN));

function jNum($num){
        $m = $num/2;
        $res = 1;
        if($num&0x1 == 1){//如果他本身就是个奇数,那么他的最大奇约数就是他本身
                $res = $num;
                goto HELL;
        }
        for($i = 1; $i<=$m; $i=$i+2){//如果不是,那么就从1开始一直往上除,每次+2(奇数)
                if($num%$i==0){
                        $res = $i;
                }
        }
        HELL:
        return $res;
}

function jNum2($num)
{
        $res = 0;

        for($i=1;$i<=$num;$i++){
                if(($i&0x1) == 1){//如果他本身就是个奇数,那么他的最大奇约数就是他本身
                        $res+=$i;
                }else{
                        $n = $i;
                        while(true){//优化,从最大的数开始往下除
                                $n = $n>>1;
                                if(($n&0x1) == 1){
                                        $res+=$n;
                                        break;
                                }
                        }
                }
        }

        HELL:
        return $res;
}

function jNum3($num){//公式法
        if($num == 1){
                return 1;
        }
        if(($num&0x1) == 0){
                return jNum3($num>>1)+$num*$num/4;
        }else{
                return jNum3($num-1)+$num;
        }

}
//$sum = 0;
//for($i = 1; $i<=$num; $i++){
//      $sum+=jNum($i);
//}
//echo $sum;

//echo jNum2($num);

echo jNum3($num);
Nach dem Login kopieren

Beginnen Sie mit der konventionellen Denkweise, bei der es immer zu einer Zeitüberschreitung kommt. Wenn ich sie auf Methode 2 ändere, gibt es immer noch eine Zeitüberschreitung.

Ändern Sie Ihr Denken. .

Wenn i eine ungerade Zahl ist, können Sie bei der Ermittlung der Summe (i) diese direkt finden, nämlich i selbst, d. h. f(i) = i.

Das Problem besteht darin, die Summe aller f(i) zu finden, i ist eine gerade Zahl.

Weil es der größte ungerade Teiler ist, also f(2k) = f(k), also f(2) + f(4) + … + f(2k) = f(1) + f( 2 ) + … + f(k);

Daher ist es nicht einfach, sich die allgemeine Formel

Ermitteln Sie mit PHP die Summe der größten ungeraden Teiler

mithilfe mathematischer Induktion auszudenken. . . So eine BT-Frage. .

Dieser Artikel ist reproduziert von: https://blog.csdn.net/qq_28602957/article/details/77914402

Empfohlenes Lernen: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonErmitteln Sie mit PHP die Summe der größten ungeraden Teiler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage