Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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

Bitte melde dich an um einen Kommentar abzugeben

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: Leicht
Webcode: b9ug-ezgp
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen