Primzahlzwillinge (Schleifen)
Ein Primzahlzwilling ist ein Paar aus Primzahlen, deren Abstand 2 ist.
Beispiele:
(3, 5), (5, 7), (11, 13), …, (569, 571), …
Schreibe eine Funktion/Methode, welche alle Primzahlpaare kleiner 2000 ausgibt.
0 Kommentare
12 Lösung(en)
def primeLoop(x):
for i in range(2, x):
if x % i == 0:
return True
return False
def primes():
# define 0, 1, 2
primes = []
for x in range(0, 2000):
if x == 2:
primes.append(x)
if x % 2 != 0:
# odd number
if primeLoop(x) == False:
primes.append(x)
return primes
def twins(prime):
x = 0
while x < len(prime)- 1:
if (prime[x +1] - prime[x]) == 2:
print(prime[x], prime[x+1])
x +=1
if __name__ == "__main__":
twins(primes())
Lösung von: Name nicht veröffentlicht
obergrenze = 2000
liste1 = [True]*(obergrenze+1)
liste2 = []
for index in range(2, obergrenze+1):
if liste1[index]:
primzahl = index
liste2.append(primzahl)
for x in range(primzahl+primzahl, obergrenze+1, primzahl):
liste1[x] = False
for i in range(len(liste2)-1):
if liste2[i]+2 == liste2[i+1]:
print("Das Paar Lautet:",liste2[i],liste2[i+1])
Lösung von: Bastian Mundt (hoerl i m)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Prim
*/
public class Prim {
public static void main(String[] args) {
int obergrenze = 2000;
Boolean[] liste1 = new Boolean[obergrenze];
List<Integer> liste2 = new ArrayList<Integer>();
Arrays.fill(liste1, Boolean.TRUE);
for (int index = 2; index < obergrenze; index++) {
if (liste1[index] == true) {
int primzahl = index;
liste2.add(primzahl);
for (int x = primzahl + primzahl; x < obergrenze; x = x + primzahl) {
liste1[x] = false;
}
}
}
int listenlaenge = liste2.size();
for (int i = 0; i < listenlaenge - 1; i++) {
if (liste2.get(i) + 2 == liste2.get(i + 1)) {
System.out.println("Das Paar lautet: " + liste2.get(i) + " " + liste2.get(i + 1));
}
}
}
}
Lösung von: Bastian Mundt (hoerl i m)
Number.prototype.isPrime = function() {
let i = 2, num = this;
if (num == 0 || num == 1) return false;
if (num == 2) return true;
while (i <= Math.ceil(Math.sqrt(num))) {
if (num % i == 0) return false;
i++;
}
return true;
}
function getPrimeTwins(limit) {
let out = [];
for (let i = 3; i <= limit - 2; i += 2)
if (i.isPrime())
if ((i + 2).isPrime()) out.push([i, i + 2]);
return out;
}
// ausgabe
console.log(getPrimeTwins(2000));
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET Core 3.x
using System;
using System.Linq;
namespace CS_MDL_CORE_Primzahlzwillinge
{
class Program
{
static void Main(string[] args)
{
// Primzahlzwilling (3, 5) wird nicht erfasst, aber danach alle nach der Form: (6n-1, 6n+1)
for (int i = 6; i < 2000; i+=6)
if (IsPrime(i - 1) && IsPrime(i + 1))
Console.WriteLine((i - 1, i + 1));
// Kurzform, da Startwert groesser 2
static bool IsPrime(int n) => !(Enumerable.Range(2, (int)Math.Ceiling(Math.Sqrt(n))).Where(x => n % x == 0).Count() > 0);
}
}
}
Lösung von: Jens Kelm (@JKooP)
def twin_primes(limit):
non_primes = [False] * (limit+1)
for i in range(2, limit+1):
if not non_primes[i]:
for j in range(2*i, limit+1, i):
non_primes[j] = True
if (n:=i-2) >= 2 and not non_primes[n]:
yield n, i
print(list(twin_primes(1999)))
Lösung von: Name nicht veröffentlicht
print([(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61), (71, 73), (101, 103), (107, 109), (137, 139), (149, 151), (179, 181), (191, 193), (197, 199), (227, 229), (239, 241), (269, 271), (281, 283), (311, 313), (347, 349), (419, 421), (431, 433), (461, 463), (521, 523), (569, 571), (599, 601), (617, 619), (641, 643), (659, 661), (809, 811), (821, 823), (827, 829), (857, 859), (881, 883), (1019, 1021), (1031, 1033), (1049, 1051), (1061, 1063), (1091, 1093), (1151, 1153), (1229, 1231), (1277, 1279), (1289, 1291), (1301, 1303), (1319, 1321), (1427, 1429), (1451, 1453), (1481, 1483), (1487, 1489), (1607, 1609), (1619, 1621), (1667, 1669), (1697, 1699), (1721, 1723), (1787, 1789), (1871, 1873), (1877, 1879), (1931, 1933), (1949, 1951), (1997, 1999)])
Lösung von: Name nicht veröffentlicht
// NET Core 3.x
Module Program
Sub Main(args As String())
For Each p In GetPrimePairs(2000)
Console.WriteLine(p)
Next
End Sub
Public Iterator Function GetPrimePairs(max As Integer) As IEnumerable(Of (Integer, Integer))
If max >= 4 Then Yield (3, 5)
For i = 6 To max Step 6
If IsPrime(i - 1) And IsPrime(i + 1) Then Yield (i - 1, i + 1)
Next
End Function
Function IsPrime(n As Integer) As Boolean
Dim r = False
If n = 2 Then r = True
If n > 2 Then r = Not Enumerable.Range(2, Math.Ceiling(Math.Sqrt(n)) - 1).Any(Function(x) n Mod x = 0)
Return r
End Function
End Module
Lösung von: Jens Kelm (@JKooP)
// NET Core 3.x
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp2
{
class Program
{
static void Main() => GetPrimePairs(2000).ToList().ForEach(x => Console.WriteLine(x));
static IEnumerable<(int, int)> GetPrimePairs(int max)
{
if (max >= 4) yield return (3, 5);
for (int i = 6; i < max; i+=6)
if (IsPrime(i - 1) && IsPrime(i + 1)) yield return (i - 1, i + 1);
}
static bool IsPrime(int n) => n switch
{
2 => true,
var k when k > 2 => !Enumerable.Range(2, (int)Math.Ceiling(Math.Sqrt(n))-1).Any(x => n % x == 0),
_ => false
};
}
}
Lösung von: Jens Kelm (@JKooP)
// C++ 11
#include <iostream>
#include <vector>
#include <tuple>
using namespace std;
bool is_prime(int);
vector<tuple<int, int>> get_prime_pairs(int);
int main()
{
for (auto p : get_prime_pairs(2000))
cout << "(" << get<0>(p) << ", " << get<1>(p)<< ")" << endl;
}
bool is_prime(int n)
{
if (n == 0 || n == 1) return false;
if (n == 2) return true;
for (auto i = 2; i <= (int)ceil(sqrt(n)); i++)
if (n % i == 0) return false;
return true;
}
vector<tuple<int, int>> get_prime_pairs(int max)
{
vector<tuple<int, int>> v;
if (max >= 4) v.push_back({ 3, 5 });
for (auto i = 6; i < max; i+=6)
if (is_prime(i - 1) + is_prime(i + 1) == 2)
v.push_back({ i - 1, i + 1 });
return v;
}
Lösung von: Jens Kelm (@JKooP)
import java.util.ArrayList;
/**
* @author Fabian Göke
* Datum: 23.10.2020
*Beschreibung: Klasse zur Berechnung sogeannanter "Primzahlzwillinge". Dies sind Paare aus Primzahlen, welche einen Abstand von 2 besitzen (bspw. 3 und 5)
*Dieses Programm soll in der Lage sein, alle Primzahlzwillinge kleiner 2000 auszugeben.
*/
public class Berechner {
//Main-Methode
public static void main(String[] args) {
Berechner unserBerechner = new Berechner();
System.out.println(unserBerechner.berechnePrimzahlenzwillinge(2000));
}
//Attribute
//Ende Attribute
//Konstruktor
public Berechner () {}
//Funktion, welche die Liste aller Primzahlenpaare als String zurückgibt
public String berechnePrimzahlenzwillinge (int pAnzahl) {
//In dieser ArrayList werden mit Hilfe der Methode "berechnePrimzahlen" alle gewünschten Primzahlen bestimmt und gespeichert
ArrayList <Integer> allePrimzahlen = berechnePrimzahlen (pAnzahl);
String ausgabe = "";
//Hier werden alle Paare herausgefiltert und der Ausgabe angefügt
for (int i=0; i<allePrimzahlen.size() - 1; i++) {
if (allePrimzahlen.get(i+1) - allePrimzahlen.get(i) == 2) {
ausgabe = ausgabe + "(" + allePrimzahlen.get(i).toString() + " " + allePrimzahlen.get(i+1) + ") ";
}
}
//Die Ausgabe wird dann hier als fertige String zurückgegeben
return ausgabe;
}
//Funktion zum berechnen aller Primzahlen auf Basis der Anzahl
public ArrayList <Integer> berechnePrimzahlen (int pAnzahl) {
ArrayList <Integer> allePrimzahlen = new ArrayList <Integer>();
//Jede natürliche Zahl außer 0 und 1 bis zur angegeben pAnzahl wird überprüft
for (int i=2; i<=pAnzahl; i++) {
boolean istPrimzahl = true;
//Falls eine Division außer mit sich selbst und mit 1 keinen Rest ergibt handelt es sich um keine Primzahl: Dies wird entsprechend markiert
for (int a=2; a<i && istPrimzahl; a++) {
if ((i % a) == 0) {
istPrimzahl = false;
}
}
//Alle Primzahlen werden dann eingefügt
if (istPrimzahl) {
allePrimzahlen.add(i);
}
}
return allePrimzahlen;
}
}
Lösung von: Fabian Göke (Friedrich-Harkort-Schule Herdecke)
n=2000;c=0
zahlen=[i for i in range(2,n+1)]
while c<n+1:
for i in zahlen[c+1:]:
if i%zahlen[c]==0:
zahlen.remove(i)
c+=1
zwill=[(zahlen[i],zahlen[i+1]) for i in range(len(zahlen)-2,-1,-1) if zahlen[i+1]-zahlen[i]==2]
print(zwill[::-1])
Lösung von: rob ert (tub)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung: