Olli Graf
3 months ago
4 changed files with 269 additions and 0 deletions
@ -0,0 +1,82 @@ |
|||
# infinite-no-oc.py |
|||
|
|||
# Dauerberechnung ohne Übertaktung |
|||
# Clock-Speed: 270 MHz |
|||
|
|||
import time |
|||
import machine |
|||
from machine import Pin |
|||
|
|||
led = Pin(25, Pin.OUT) |
|||
|
|||
#Berechnung von Primzahlen mit dem Sieb des Eratosthenes. |
|||
|
|||
def sieb_des_eratosthenes(limit): |
|||
# Erzeuge eine Liste, die angibt, ob eine Zahl eine Primzahl ist |
|||
is_prime = [True] * (limit + 1) |
|||
p = 2 |
|||
|
|||
while (p * p <= limit): |
|||
# Wenn is_prime[p] nicht verändert wurde, ist p eine Primzahl |
|||
if is_prime[p]: |
|||
# Alle Vielfachen von p können keine Primzahl sein. |
|||
for i in range(p * p, limit + 1, p): |
|||
is_prime[i] = False |
|||
p += 1 |
|||
|
|||
# Sammle alle Primzahlen in einer Liste. |
|||
prime_numbers = [p for p in range(2, limit + 1) if is_prime[p]] |
|||
return prime_numbers |
|||
|
|||
# Methode zur Laufzeitbestimmung |
|||
|
|||
def berechnung(limit): |
|||
ergebnis = {} |
|||
|
|||
start_time = time.ticks_ms() |
|||
|
|||
prime_numbers = sieb_des_eratosthenes(limit) |
|||
ergebnis['primzahlen'] = prime_numbers |
|||
|
|||
end_time = time.ticks_ms() |
|||
|
|||
running_time =time.ticks_diff(end_time,start_time) |
|||
ergebnis['laufzeit'] = running_time |
|||
|
|||
return ergebnis |
|||
|
|||
# Liefert den Clock-Speed in MHz |
|||
def get_speed(): |
|||
return str(round(machine.freq()/1000000,1)) |
|||
|
|||
|
|||
|
|||
limit = 10000 |
|||
|
|||
machine.freq(270000000) |
|||
|
|||
while True: |
|||
led.on() |
|||
berechnung(limit) |
|||
led.off() |
|||
#laufzeit1 = ergebnis1['laufzeit'] |
|||
|
|||
|
|||
#print(f'Laufzeit: {laufzeit1}ms') |
|||
|
|||
#Übertaktung auf 270MHz |
|||
#led.on() |
|||
#machine.freq(270000000) |
|||
#print(f'Durchgang #2 mit {get_speed()}MHz') |
|||
#ergebnis2 = berechnung(limit) |
|||
|
|||
|
|||
#laufzeit2 = ergebnis2['laufzeit'] |
|||
#primzahlen = ergebnis2['primzahlen'] |
|||
#led.off() |
|||
machine.freq(125000000) |
|||
|
|||
print(f'Primzahlen bis {limit}: {primzahlen}') |
|||
print(f'Laufzeit: {laufzeit2}ms') |
|||
p = (laufzeit1 -laufzeit2) / laufzeit1 *100 |
|||
print(f' prozentualer Unterschied: {p}%%') |
@ -0,0 +1,84 @@ |
|||
# infinite-no-oc.py |
|||
|
|||
# Dauerberechnung ohne Übertaktung |
|||
# Clock-Speed: 125 MHz |
|||
|
|||
import time |
|||
import machine |
|||
from machine import Pin |
|||
|
|||
led = Pin(25, Pin.OUT) |
|||
|
|||
#Berechnung von Primzahlen mit dem Sieb des Eratosthenes. |
|||
|
|||
def sieb_des_eratosthenes(limit): |
|||
# Erzeuge eine Liste, die angibt, ob eine Zahl eine Primzahl ist |
|||
is_prime = [True] * (limit + 1) |
|||
p = 2 |
|||
|
|||
while (p * p <= limit): |
|||
# Wenn is_prime[p] nicht verändert wurde, ist p eine Primzahl |
|||
if is_prime[p]: |
|||
# Alle Vielfachen von p können keine Primzahl sein. |
|||
for i in range(p * p, limit + 1, p): |
|||
is_prime[i] = False |
|||
p += 1 |
|||
|
|||
# Sammle alle Primzahlen in einer Liste. |
|||
prime_numbers = [p for p in range(2, limit + 1) if is_prime[p]] |
|||
return prime_numbers |
|||
|
|||
# Methode zur Laufzeitbestimmung |
|||
|
|||
def berechnung(limit): |
|||
ergebnis = {} |
|||
|
|||
start_time = time.ticks_ms() |
|||
|
|||
prime_numbers = sieb_des_eratosthenes(limit) |
|||
ergebnis['primzahlen'] = prime_numbers |
|||
|
|||
end_time = time.ticks_ms() |
|||
|
|||
running_time =time.ticks_diff(end_time,start_time) |
|||
ergebnis['laufzeit'] = running_time |
|||
|
|||
return ergebnis |
|||
|
|||
# Liefert den Clock-Speed in MHz |
|||
def get_speed(): |
|||
return str(round(machine.freq()/1000000,1)) |
|||
|
|||
# Beispielverwendung: Finde alle Primzahlen bis 1000 |
|||
|
|||
print(f'Durchgang #1 mit {get_speed()}MHz') |
|||
|
|||
limit = 10000 |
|||
|
|||
machine.freq(125000000) |
|||
|
|||
while True: |
|||
led.on() |
|||
berechnung(limit) |
|||
led.off() |
|||
#laufzeit1 = ergebnis1['laufzeit'] |
|||
|
|||
|
|||
#print(f'Laufzeit: {laufzeit1}ms') |
|||
|
|||
#Übertaktung auf 270MHz |
|||
#led.on() |
|||
#machine.freq(270000000) |
|||
#print(f'Durchgang #2 mit {get_speed()}MHz') |
|||
#ergebnis2 = berechnung(limit) |
|||
|
|||
|
|||
#laufzeit2 = ergebnis2['laufzeit'] |
|||
#primzahlen = ergebnis2['primzahlen'] |
|||
#led.off() |
|||
machine.freq(125000000) |
|||
|
|||
print(f'Primzahlen bis {limit}: {primzahlen}') |
|||
print(f'Laufzeit: {laufzeit2}ms') |
|||
p = (laufzeit1 -laufzeit2) / laufzeit1 *100 |
|||
print(f' prozentualer Unterschied: {p}%%') |
@ -0,0 +1,29 @@ |
|||
import time |
|||
|
|||
def sieve_of_eratosthenes(limit): |
|||
# Erzeuge eine Liste, die angibt, ob eine Zahl eine Primzahl ist |
|||
is_prime = [True] * (limit + 1) |
|||
p = 2 |
|||
|
|||
while (p * p <= limit): |
|||
# Wenn is_prime[p] nicht verändert wurde, ist p eine Primzahl |
|||
if is_prime[p]: |
|||
# Aktualisiere alle Vielfachen von p als nicht prim |
|||
for i in range(p * p, limit + 1, p): |
|||
is_prime[i] = False |
|||
p += 1 |
|||
|
|||
# Sammle alle Primzahlen |
|||
prime_numbers = [p for p in range(2, limit + 1) if is_prime[p]] |
|||
return prime_numbers |
|||
|
|||
# Beispielverwendung: Finde alle Primzahlen bis 100 |
|||
limit = 10000 |
|||
start_time = time.ticks_ms() |
|||
prime_numbers = sieve_of_eratosthenes(limit) |
|||
end_time = time.ticks_ms() |
|||
|
|||
running_time =time.ticks_diff(end_time,start_time) |
|||
|
|||
print(f'Primzahlen bis {limit}: {prime_numbers}') |
|||
print(f'Laufzeit: {running_time}ms') |
@ -0,0 +1,74 @@ |
|||
# sieve_oc.py |
|||
import time |
|||
import machine |
|||
from machine import Pin |
|||
|
|||
led = Pin(25, Pin.OUT) |
|||
|
|||
#Berechnung von Primzahlen mit dem Sieb des Eratosthenes. |
|||
|
|||
def sieb_des_eratosthenes(limit): |
|||
# Erzeuge eine Liste, die angibt, ob eine Zahl eine Primzahl ist |
|||
is_prime = [True] * (limit + 1) |
|||
p = 2 |
|||
|
|||
while (p * p <= limit): |
|||
# Wenn is_prime[p] nicht verändert wurde, ist p eine Primzahl |
|||
if is_prime[p]: |
|||
# Alle Vielfachen von p können keine Primzahl sein. |
|||
for i in range(p * p, limit + 1, p): |
|||
is_prime[i] = False |
|||
p += 1 |
|||
|
|||
# Sammle alle Primzahlen in einer Liste. |
|||
prime_numbers = [p for p in range(2, limit + 1) if is_prime[p]] |
|||
return prime_numbers |
|||
|
|||
# Methode zur Laufzeitbestimmung |
|||
|
|||
def berechnung(limit): |
|||
ergebnis = {} |
|||
|
|||
start_time = time.ticks_ms() |
|||
|
|||
prime_numbers = sieb_des_eratosthenes(limit) |
|||
ergebnis['primzahlen'] = prime_numbers |
|||
|
|||
end_time = time.ticks_ms() |
|||
|
|||
running_time =time.ticks_diff(end_time,start_time) |
|||
ergebnis['laufzeit'] = running_time |
|||
|
|||
return ergebnis |
|||
|
|||
# Liefert den Clock-Speed in MHz |
|||
def get_speed(): |
|||
return str(round(machine.freq()/1000000,1)) |
|||
|
|||
# Beispielverwendung: Finde alle Primzahlen bis 1000 |
|||
|
|||
print(f'Durchgang #1 mit {get_speed()}MHz') |
|||
|
|||
limit = 10000 |
|||
ergebnis1 = berechnung(limit) |
|||
laufzeit1 = ergebnis1['laufzeit'] |
|||
|
|||
|
|||
print(f'Laufzeit: {laufzeit1}ms') |
|||
|
|||
#Übertaktung auf 270MHz |
|||
led.on() |
|||
machine.freq(270000000) |
|||
print(f'Durchgang #2 mit {get_speed()}MHz') |
|||
ergebnis2 = berechnung(limit) |
|||
|
|||
|
|||
laufzeit2 = ergebnis2['laufzeit'] |
|||
primzahlen = ergebnis2['primzahlen'] |
|||
led.off() |
|||
machine.freq(125000000) |
|||
|
|||
print(f'Primzahlen bis {limit}: {primzahlen}') |
|||
print(f'Laufzeit: {laufzeit2}ms') |
|||
p = (laufzeit1 -laufzeit2) / laufzeit1 *100 |
|||
print(f' prozentualer Unterschied: {p}%%') |
Loading…
Reference in new issue