Liczby pierwsze na spirali Fibonacciego.

02 July, 2019

 

Kolejny mój wpis w związku z zabawą liczbami.

Tym razem postanowiłem połączyć dwa ciekawe zbiory.

Nie widziałem podobnego rysynku w sieci więc uznałem, że przeprowadzę eksperyment i sam wyrysuję programowo spiralę, a następnie naniosę liczby Fibonacciego oraz liczby Pierwsze.
Gdyby była już taka spirala komuś znana to całkiem dobrze się składa, bo to co ja zauważam może jest wiadome, ale nie było dla mnie jeszcze przed eksperymentem.

Otóż liczby pierwsze na spirali występują w bardzo losowy sposób, to jest pewne.
Przybywa ich pomiedzy kolejnymi wyrazami ciągu Fibonacciego, to jest pewne.

Z obserwacji wynika też coś takiego, że:
Suma liczb pierwszych na spirali pomiędzy kolejnymi wyrazami ciągu Fibonacciego podzielona przez ilość liczb pierwszych, a następnie podzielona przez większą liczbę Fibonacciego daje w przybliżeniu połowę Złotej liczby Phi.

Innymi słowy: suma liczb pierwszych wskazana na spirali w polu każdego kwadratu podzielona przez (ilość liczb pierwszych pomnożoną przez wyższą liczbę Fibonacciego zawsze w wyniku daje nam przybliżenie połowy Złotej liczby.


Wyjątkiem jest początek spirali, gdzie wartości są równe 1.
Czyli zbiór jest w pewnym sensie związany ze złotą spiralą w ten sposób. Czy może to zbyt naciągany wniosek?

Proszę zarkąć na obrazki okna aplikacji, w której rysowałem spiralę i nanosiłem liczby pierwsze.
Zrobiłem kilka zrzutów. Licencja CC.

 

undefined

 

undefined

undefined

Na rysunkach na biało liczby pierwsze. Mamy dane o tych liczbach.
Wyjaśnienie:

QTY - ilość liczb pierwszych pomiędzy kolejnymi wyrazami wyrazami ciągu Fibonacciego, czyli w polu danego kwadratu.

SUM - suma liczb pierwszych pomiędzy kolejnymi wyrazami ciągu...

AVG - średnia obliczona poprzez podział sumy przez ilość, czyli SUM/QTY.

SUM/F - suma liczb pierwszych podzielona przez liczbę Fibonacciego.

AVG/F - pokazuje średnią liczb pierwszych w danym polu kwadratu, podzieloną przez liczbę Fibonacciego, to jest zawsze przybliżenie równe połowie Złotej liczby PHI/2 ≈ 0.80... z wyjątkiem trzech pierwszych liczb (2,3,5), które są równe liczbom Fibonacciego, następnie dobre przybliżenie raczej rośnie.

Gdyby ktoś był zainteresowany zabawą z aplikacją, która rysuje ta spiralę, to mogę udostępnić, proszę śmiało pisać w tej sprawie.. Jest to miniaturowy programik napisany w języku C z wykorzystaniem starej biblioteki Allegro w wersji 4.2, ale trochę wymagający pod względem mocy sprzętowej. Może działać zarówno na Windows jak i Linux.

To na razie tyle. Dzięki za dotrwanie do końca i pozdrawiam.

 

 

MIPU - mini aktualizator adresu IP.

03 December, 2018

MIPU - mini aktualizator adresu IP.


Witam.

W tym wpisie chciałbym przedstawić swoją miniaturową aplikaję 'mipu'.
Mipu to skrót od 'mini IP updater'. Program działa z linii komend.
Celem jest uzyskanie zewnętrznego adresu IP naszej domowej sieci w formacie IPv4, zarówno na serwerze jak i po stronie klienta korzystającego z mipu.


Jeśli jesteśmy w sieci lokalnej i korzystamy z routera uzyskanie zewnętrznego adresu IP jest możliwe po wpisaniu zapytania 'my ip' w wyszukiwarce internetowej.
Na tej zasadzie lecz trochę rozwiniętej działa również ten program.
Łączy się z podanym jako pierwszy parametr adresem serwera. Wykorzystuje protokół http i łaczy się z serwerem na porcie numer 80.
Nie trzeba przekierowywac portu na routerze na komputer z którego zapytanie wysyłamy aby uzyskać odpowiedź. Jednak należy o tym pamiętać, gdy stawiamy serwer www lokalnie.


Przykładowe polecenie

mipu.exe api.ipify.org GET ?format=json

Powoduje ładnie sformatowaną odpowiedź z serwera. Czysty adres IPv4.

Zmodyfikowałem tez przykładowy plik dla serwera, który wspiera php.
Odpowiada tylko gdy w zapytaniu mipu podamy rodzaj metody POST i wprowadzimy nasz nick i hasło.

Strony, które wyświetlają nasze publiczne IP w przeglądarkach, nie odpowiedzą poprawnie mipu gdyż ten wyszukuje w bloku danych znaków { }.

Czyli poprawne echo z serwera powinno miec postać.

echo ' {"ip": "'.$ip_address.'"} ';

Jak przypisać zmiennej $ip_address nasz właściwy adres można zobaczyć w pliku "index2.php" w folderze "for server" w załączniku.

Plik .bat, który przygotowałem wykona automatyczne uruchomienia mipu regularnie według ustalonego czasu co 15 minut.
Wystarczy wyedytowac adres serwera na swój podać nazwę pliku w parametrach mipu i wrzucić do katalogu na serwerze ten plik index2.php. Nazwę pliku można oczywiście zmienić. Tak samo należy pamiętac o ustawieniu własnego loginu i hasła, czy też username i password bo takie brzmienie mają te zmienne w programie.

Link do programu na Google Drive.

MIPU 0.5 (beta).

To tyle na dzisiaj.

 

 

Populacja świata i liczby Fibonacciego. (World population and Fibonacci numbers.)

07 October, 2018

Witam.

Poniższy wykres funkcji wykładniczej (na diagramie napisałem logarytmicznej) przedstawia wzrost populacji ludzi na świecie z uwzględnieniem kolejnych liczb ciągu Fibonacciego (Złotej liczby "Phi"). Kolejne liczby na osi pionowej zaczynają się od 41-szej liczby ciągu i kończą na 50-tej. Na wykresie, ta liczba określająca wielkość populacji, której wartość w danym roku jest równa liczbie z ciągu Fibonacciego, jest zaznaczona punktem w kolorze czerwonym. Oś pozioma przedstawia upływ czasu od roku 1 AD. (Naszej Ery).

 

 

undefined

Z kolei na tym screenie jest wielkość populacji liczona od około 200 000 BC. Pionowo w kolumnach są wpisane następujące dane:Pierwsza liczba od lewej to liczba porządkowa konkretnej liczby ciągu Fibonacciego, druga liczba to wartość liczby Fibonacciego, później sa nieistotne dla istoty sprawy obliczenia, następnie jest data, a ostatnia kolumna to upływ czasu.

Lp.      Populacja/Licza Fibonacciego                              Rok.                         Zmiana.

undefined

 

Podjąłęm próbę wyznaczenai wzoru w celu obliczenia wielkości polulacji dla danego roku, prezentowanego na osi x tego wykresu typu log-lin.

Niestety do tej pory udało mi się wyznaczyć wzór, który jest wprawdzie poprawny jednak nie znając wartości jednej zmiennej nie będziemy mogli obliczyć wielkości populacji dla danego roku. Ta zmienna to r - wskaźnik wzrostu populacji.

Ten wzór ma postać:

P=P0 * e ^( r*delta t)

P - Poszukiwana wielkośc populacji w danym okresie.

P0 - Początkowa wielkość populacji, w znanym nam okresie.

r - wskaźnik wzrostu populacji (nieznany dla niektórych okresów).

delta t - czas jaki upłynął pomiędzy okresem w którym populacja miała wartość początkową P0 i poszukiwaną P.

e - liczba Eulera = 2.71828 (w przybliżeniu)

 

Posługując się kolejnymi wartościami ciągu Fibonacciego na osi y, wiemy też że:

P(n+1) = P(n) * Phi

oraz:

P(n-1) = P(n) * phi

 

P (n) = wielkość populacji według liczby porządkowej n ciągu Fibonacciego na osi y.

Phi = 1.618 , a phi 0.618 ( w przybliżeniu).

Ale dalej nie potrafię obliczyć wskaźnika r dla wzoru wyrysowanej funkcji. Może ktoś wie jak to rozwiązać? Prosze dać znać na maila.

To na razie tyle. Pozdrawiam.

 

 

 

 

Biblioteka Allegro i Asembler.

30 May, 2018

 

Biblioteka Allegro w wersji 4 nie jest już rozwijana. Jednak pokażę w tym wpisie jak skorzystać z tej biblioteki posługując się asemblerem. Wykorzystam NASM. Strona oficjalna projektu znajduje się pod adresem www.nasm.us
Potrzebny również będzie kompilator gcc i jego biblioteki. Można pobrać z tej strony - GNU GCC Collection
Dla programujących pod Windows wystarczy zainstalować MinGW.
Dla chcących coś więcej Cygwin powinien zadowolić swoją funkcjonalnością.

Program graf1.exe działa w trybie okienkowym. Wyświetla napis i rysuje prostą i okrąg. Następnie czeka na wciśnięcie klawisza, po czym zostaje zamknięty.

; Program graf1.exe wykorzystuje bibliotekę Allegro
;
; Autor: Bogdan D., bogdandr (at) op.pl 
; Modyfikacja: Sylvi91 
;
; kompilacja:
; 
; nasm -f win32 -o graf1.o graf1.asm
; 
; linkowanie dynamiczne. Uwaga program wymaga biblioteki .dll do działania!
;
; gcc -o graf1 graf1.o -L"YourDirectorylib" -lalleg -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound
;
; linkowanie statyczne.
;
; gcc -o graf1 graf1.o -L"YourDirectorylib" -lalleg_s -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound
;



section .text
; wymagane przez Allegro:
global _main		
global _mangled_main
global _mangled_main_address

; deklaracje elementów zewnętrznych:
extern	_install_allegro
extern	_install_keyboard
extern	_set_color_depth
extern	_set_gfx_mode
extern	_allegro_exit
extern	_text_mode
extern	_set_palette
extern	_default_palette
extern	_clear_to_color
extern	_screen
extern	_textout
extern	_font
extern	_line
extern	_makecol
extern	_circle
extern	_readkey

%define GFX_AUTODETECT 0		; autowykrywanie sterownika
%define GFX_AUTODETECT_WINDOWED 2		; autowykrywanie sterownika

_main:			; TO WŁĄCZYĆ, JEŚLI ALLEGRO WYMAGA FUNKCJI MAIN
_mangled_main:
	; inicjalizacja biblioteki:
	push	dword 0
	push	err			; nasza zmienna do błędów
	push	dword 0
	call	_install_allegro
	add	esp, 3*4		; zdjęcie parametrów ze stosu

	; instalacja klawiatury
	call	_install_keyboard

	; ustawienie głębi kolorów:
	push	dword 8
	call	_set_color_depth
	add	esp, 1*4		; zdjęcie parametrów ze stosu

	; ustawienie rozdzielczości:
	push	dword 0			; wysokość okna
	push	dword 0			; szerokość okna
	push	dword 480		; wysokość całego trybu
	push	dword 640		; szerokość całego trybu
	push	dword GFX_AUTODETECT_WINDOWED
	call	_set_gfx_mode
	add	esp, 5*4

	; sprawdź, czy się udało
	cmp	eax, 0
	jne	koniec

	; ustaw tło pod tekstem
	push	dword -1
	call	_text_mode
	add	esp, 1*4

	; ustaw domyślną paletę
	push	dword _default_palette
	call	_set_palette
	add	esp, 1*4

	; wyczyść ekran
	push	dword 0			; czyść na czarno
	push	dword [_screen]		; co czyścić
	call	_clear_to_color
	add	esp, 2*4

	; wyświetl napis
	push	dword 15		; kolor
	push	dword 10		; współrzędna Y
	push	dword 10		; współrzędna X
	push	dword napis		; napis do wyświetlenia
	push	dword [_font]		; czcionka
	push	dword [_screen]		; gdzie wyświetlić
	call	_textout
	add	esp, 6*4

	; stwórz kolor biały do narysowania linii
	push	dword 255		; składowa niebieska
	push	dword 255		; składowa zielona
	push	dword 255		; składowa czerwona
	call	_makecol
	add	esp, 3*4

	; narysuj linię
	push	eax			; kolor
	push	dword 240		; współrzędna Y końca
	push	dword 320		; współrzędna X końca
	push	dword 400		; współrzędna Y początku
	push	dword 540		; współrzędna X początku
	push	dword [_screen]
	call	_line
	add	esp, 6*4

	; stwórz kolor zielony do narysowania koła
	push	dword 0
	push	dword 255
	push	dword 0
	call	_makecol
	add	esp, 3*4

	; narysuj koło
	push	eax			; kolor
	push	dword 20		; promień
	push	dword 240		; współrzędna Y środka
	push	dword 320		; współrzędna X środka
	push	dword [_screen]
	call	_circle
	add	esp, 5*4

	; czekaj na klawisz
	call	_readkey

koniec:
	; zamknij Allegro
	call	_allegro_exit
	; powróć z naszej funkcji głównej
	ret

section .data
napis			db	"Allegro", 0	; napis do wyświetlenia
_mangled_main_address	dd	_mangled_main	; wymagane
err			dd	0		; nasza zmienna błędów

Przykład pochodzi z tej strony.


... i to tyle.

Home