85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # 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}%%')
 | 
