Behandle Primzahlen mit Python / Ruby / PHP / Golang (Go)

Behandle Primzahlen mit Python / Ruby / PHP / Go (Golang)

Ein Primzahlproblem, das definitiv auf fast jeder Website auftritt, wenn Sie an wettbewerbsorientierten Programmen teilnehmen. Da es Fälle gibt, in denen eine Primzahl für eine bestimmte Ganzzahl oder weniger erhalten wird, unabhängig davon, ob es sich um eine bestimmte Ganzzahl oder eine Primzahl handelt, und manchmal eine Zerlegung des Primfaktors erforderlich ist, ist es erforderlich, jede zu behandeln. Es gibt eine Prime-Klasse in Ruby, die hier jedoch nicht verwendet wird.

Suchen Sie eine Primzahl für weniger als oder gleich der angegebenen Ganzzahl

Realisiert mit "Eratostenes Sieb".

Eratostenes Sieb

Es wird gesagt, dass der Algorithmus selbst zum Finden von Primzahlen aus dem alten Griechenland existiert. [Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83 Die Erklärung von% 8D% E3% 82% B9% E3% 81% AE% E7% AF% A9) ist sehr leicht zu verstehen. Dort begegnen wir auch dem Ausschlussprinzip (Zahlensatz). Ein Beispiel für die Verwendung des Einschlussprinzips ist hier beschrieben [http://qiita.com/hiroykam/items/3886d6a213cd593fdfab].

Eratosness Sieb Implementierung

Gibt Primzahlen für positive ganze Zahlen von 1000 oder weniger aus. Der Einfachheit halber erstellen beide Methoden ein Array mit Elementen bis zu 1001, sodass festgestellt werden kann, ob es sich um eine Primzahl handelt oder nicht.

Etostenes Sieb mit Python 3

def prime(maximum):
    sieve = [True] * maximum

    def sieved(prime):
        for not_prime in range(prime + prime, len(sieve), prime):
            sieve[not_prime] = False

    sieve[0] = sieve[1] = False
    sieved(2)
    for x in range(3, int(maximum ** 0.5) + 1, 2):
        if sieve[x]: sieved(x)
    return [prime for prime, is_prime in enumerate(sieve) if is_prime]

if __name__ == '__main__':
    print(prime(1001))

Eratostenes Sieb mit Rubin 2.4

Erstellt basierend auf Python 3-Code.

def prime(maximum)
  sieve = Array.new(maximum, true)

  sieved = lambda do |prime|
    ((prime + prime)..sieve.length).step(prime).each do |not_prime|
      sieve[not_prime] = false
    end
  end

  sieve[0], sieve[1] = false, false
  sieved.call(2)
  (3..(maximum ** 2).to_i).step(2).each do |x|
    sieved.call(x) if sieve[x]
  end

  sieve
end

prime(10001).each_with_index do |f, x|
  p x if f
end

Eratostenes-Sieb mit PHP 7.1

Erstellt basierend auf Python 3-Code.

<?php

function prime(int $maximum) : array {
    $sieve = [];
    $sieve[0] = $sieve[1] = false;
    array_walk(range(2, $maximum - 1), function ($i) use(&$sieve) { $sieve[$i] = true; });

    $sieved = function (int $prime) use(&$sieve) : void {
        array_walk(range($prime + $prime, count($sieve) - 1, $prime),  function($not_prime) use(&$sieve) : void {
            $sieve[$not_prime] = false;
        });
    };
    $sieved(2);
    array_walk(range(3, intval($maximum ** 0.5), 2), function ($x) use(&$sieve, $sieved) : void {
        if ($sieve[$x]) $sieved($x);
    });
    return array_filter($sieve);
}

array_walk(array_keys(prime(1001)), function ($prime) { print($prime. PHP_EOL); });

Eratostines Sieb mit GoLang

Erstellt basierend auf Python 3-Code.

package main

import (
	"fmt"
    "math"
)

func prime(maximum int) [] bool {
	sieve := make([]bool, maximum)
	for i := range sieve {
		sieve[i] = true
	}

	sieved := func(prime int) {
		for i := prime + prime; i < maximum; i += prime {
			sieve[i] = false
		}
	}

	sieve[0] = false; sieve[1] = false
	sieved(2)
	end := int(math.Pow(float64(maximum), 0.5) + 1)
	for i := 3; i < end; i += 2 {
		if sieve[i] {
			sieved(i)
		}
	}

	return sieve
}

func main() {
	maximum := 1001
	print_prime := func () {
		for value, is_prime := range prime(maximum) {
			if is_prime {
				fmt.Printf("%v\n", value)
			}
		}
	}
	print_prime()
}

Finden Sie heraus, ob eine Ganzzahl eine Primzahl ist

Es ist möglich, den obigen Code mit dem Eratostenes-Sieb zu verwenden, es gibt jedoch auch zusätzliche Berechnungen, sodass die Leistung in diesem Fall nicht gut ist. Betrachten wir daher den Algorithmus.

  1. Behandle "2", "3", "5" als Primzahlen
  2. Andere gerade Zahlen als "2" sind keine Primzahlen
  3. Wenn es durch "3", "5" teilbar ist, ist es keine Primzahl
  4. Inkrementieren Sie für ganze Zahlen größer oder gleich "7" und prüfen Sie, ob von "0" eine Überschussberechnung für eine bestimmte ganze Zahl vorliegt oder nicht. Das Inkrement ist jedoch "4", wenn es ungerade ist, und "2", wenn es gerade ist.

Finden Sie heraus, ob eine Ganzzahl, die Python 3 ist, eine Primzahl ist

def is_prime(n):
    if n < 2:
        return False
    if n == 2 or n == 3 or n == 5:
        return True
    if not n & 1:
        return False
    if n % 2 == 0 or n % 3 == 0 or n % 5 == 0:
        return False

    f, v, m = True, 7, int(n ** 0.5) + 1
    while v < m:
        if n % v == 0: return False
        v += 4 if f else 2
        f = not f
    return True


if __name__ == '__main__':
    print(is_prime(4993)) # True

Überprüfen Sie, ob eine Ganzzahl, die Ruby 2.4 ist, eine Primzahl ist

def prime?(n)
  if n < 2
    false
  elsif n == 2 || n == 3 || n == 5 then true
  elsif n & 1 == 0 then false
  elsif n % 2 == 0 || n % 3 == 0 || n % 5 == 0 then false
  else
    f, v, m = true, 7, (n ** 0.5).to_i + 1
    while v < m do
      if n % v == 0
        false
        return
      end
      v += f ? 4 : 2
      f = !f
    end
    true
  end
end

p prime?(4993) # -> true

Überprüfen Sie, ob eine Ganzzahl, die PHP ist, eine Primzahl ist

php7.1


<?php

function is_prime(int $n) : bool {
    $r = true;
    if ($n < 2) $r = false;
    elseif ($n == 2 || $n == 3 || $n == 5) $r = true;
    elseif ($n & 1 == 0) $r = false;
    elseif ($n % 2 == 0 || $n % 3 == 0 || $n % 5 == 0) $r = false;
    else {
        $f = true;
        $v = 7;
        $m = intval($n ** 0.5) + 1;
        while ($v < $m) {
            if ($n % $v == 0) {
                $r = false;
                break;
            }
            $v += $f ? 4 : 2;
            $f = !$f;
        }
    }
    return $r;
}

print(is_prime(4993) ? "true" : "false");

Finden Sie heraus, ob eine Ganzzahl, die Golang ist, eine Primzahl ist

package main

import (
    "fmt"
    "math"
)

func is_prime(n int) bool {
    switch {
    case n < 2:
       return false
    case n == 2 || n == 3 || n == 5:
       return true
    case n & 1 == 0:
       return false
    case n % 2 == 0 || n % 3 == 0 || n % 5 == 0:
       return false
    }
    
    f := true
    v := 7
    m := int(math.Pow(float64(n), 0.5)) + 1
    for v < m {
        if n % v == 0 {
            return false
        }
        if f {
            v += 4
        } else {
            v += 2
        }
        f = !f
    }
    return true
}

func main() {
    fmt.Print(is_prime(4993))  // true
}

Primfaktor-Zerlegung einer ganzen Zahl

Ich habe fast keine Erfahrung damit, aber da es sich um Primzahlen handelt, werde ich versuchen, jede zu realisieren.

Primfaktor-Zerlegung von Ganzzahlen, die Python3 sind

Python hat SymPy, aber stackoverflow ) Wurde durch die in beantwortete Methode realisiert.

def prime_factors(n):
    i, factors = 2, []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n /= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors

if __name__ == '__main__':
    print(prime_factors(1200))  # [2, 2, 2, 2, 3, 5, 5]

Primfaktor-Zerlegung von Ganzzahlen, die Ruby 2.4 sind

def prime_factor(n)
  i, factors = 2, []
  while i * i <= n do
    if n % i != 0
      i += 1
    else
      n /= i
      factors.push(i)
    end
  end
  if n > 1
    factors.push(n)
  end
  factors
end

p prime_factor(1200) # -> [2, 2, 2, 2, 3, 5, 5]

Primfaktor-Zerlegung von ganzen Zahlen, die PHP 7.1 sind

<?php

function prime_factors(int $n) : array {
    $i = 2;
    $factors = [];
    while ($i * $i <= $n) {
        if ($n % $i) $i += 1;
        else {
            $n /= $i;
            $factors[] = $i;
        }
    }
    if ($n > 1) $factors[] = $n;
    return $factors;
}

print_r(prime_factors(1200)); // [2, 2, 2, 2, 3, 5, 5]

Primfaktor-Zerlegung von ganzen Zahlen, die Golang sind

package main

import "fmt"

func prime_factors(n int) [] int {
    factors := make([]int, 0)
    i := 2
    for i * i <= n {
        r := n % i
        if r != 0 {
            i += 1
        } else if r == 0 {
            n /= i
            factors = append(factors, i)
        }
    }
    if n > 1 {
        factors = append(factors, n)
    }
    return factors
}

func main() {
    fmt.Print(prime_factors(1200))  // [2 2 2 2 3 5 5]
}

Recommended Posts

Behandle Primzahlen mit Python / Ruby / PHP / Golang (Go)
Gruppierungskombination in Python / Ruby / PHP / Golang (Go)
Überlappende Kombinationen mit Obergrenzen in Python / Ruby / PHP / Golang (Go)
Hierarchie, Reihenfolge, (doppelte) Kombination in Python / Ruby / PHP / Golang (Go)
Primzahl in Python
Behandeln Sie komplexe Zahlen in Python
Umgang mit JSON in Ruby, Python, JavaScript, PHP
Verwirklichen Sie den PHP / Python-Generator mit Golang / Ruby
[Zusammenfassung des Scrapings] | Python Node.js PHP Ruby Go VBA | Scraping von Yahoo Top in 6 Sprachen
Projekt Euler # 10 "Summe der Primzahlen" in Python
GNU GLOBAL (gtags) + α in Go, Ruby, Python
Finden Sie in Python Primzahlen mit einem möglichst kurzen Code
Markdown mit Python behandeln
Primzahl 2 in Python
python, php, ruby Konvertieren von Dezimalzahlen in n
Behandeln Sie Umgebungsdaten in Python
[Python 3] Primfaktor-Zerlegung in 14 Zeilen
Java VS PHP VS Python VS Ruby
Beurteilung von Primzahlen mit Python
Behandeln Sie Umgebungsvariablen in Python
Hallo Welt in verschiedenen Sprachen [Python / PHP / Java / Perl / Ruby]
Testen mit Zufallszahlen in Python
Mehrstufige Auswahl (Go / C # / Ruby / Python)
Dynamischer Proxy mit Python, Ruby, PHP
Unendlicher Primgenerator in Python3
Behandeln Sie Posix-Nachrichtenwarteschlangen in Python
Behandeln Sie Daten im NetCDF-Format mit Python
Behandeln Sie das GDS II-Format mit Python
Das Gesetz der Zahlen in Python
[Python] nCr mod Primzahlen berechnen
Umgang mit Japanisch mit Python
Vermeiden Sie verschachtelte Schleifen in PHP und Python
Projekt Euler # 3 "Maximale Primfaktoren" in Python
Unterschiede zwischen Ruby und Python im Umfang
Projekt Euler # 7 "1000 1. Primzahl" in Python
[Grundlegende Grammatik] Unterschiede zwischen Ruby / Python / PHP
Versuchen Sie etwas wie Python für-else in Ruby
Projekt Euler # 2 "Gerade Fibonacci-Zahl" in Python
Wie schreibe ich Ruby to_s in Python
Unterschiede in der Zeichenfolgenverarbeitung zwischen Python, Ruby, JS und PHP (Kombination und Variablenerweiterung)
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
Primzahlaufzählung und Primzahlbeurteilung in Python
Implementieren Sie die Wiederholung und Erkundung von Gedenkstätten in Python und Go
Verwenden Sie ein Kryptografiemodul, das OpenSSL in Python verarbeitet
J / N-Verarbeitung mit Bash, Python und Go
Projekt Euler # 13 "Summe großer Zahlen" in Python
Holen Sie sich die Datei, Funktion, Zeilennummer in Python ausgeführt
POST JSON mit Python und empfange mit PHP
Primfaktor-Zerlegung Version 2 der in Python eingegebenen Ganzzahlen
Symbolischer Gruppenname für reguläre Ausdrücke in Python / Ruby
Wie man mit dem Datum / Uhrzeit-Typ in Pythons SQLite3 umgeht
Mal sehen, wie man die Anzahl der Elemente in einem Array in einigen Sprachen zählt [Go, JavaScript, PHP, Python, Ruby, Swift]