Wielomiany generujace liczby pierwsze
ostatnie wiadomości | regulamin | latex
Autor | Wiadomość |
nk_1 postów: 14 | ![]() Analizowałem sposób (podobny do sita Eratostenesa ale szybszy) na wyznaczenie liczb pierwszych tzw. Sito Małgorzaty opisany pod linkiem: https://1drv.ms/b/s!AsqwpKK-51whhhzzvgOxdib8Y_rW. Doszedłem do wniosku, że jeżeli w ciagu wyznaczonym przez sito Małgorzaty będzie bardzo wiele kolejnych liczb złożonych to w określonej odległości od tego miejsca pojawią się liczby pierwsze w stałych odległościach. Długość ciągu kolejnych licz pierwszych może być dużo większa niż co obecnie pisze się w Internecie o wielomianach generujących liczby pierwsze. Poniżej załączam makro w Excelu wyznaczając liczby pierwsze wyżej wymienioną metodą. Sub sito() Dim j, i As Long Dim a, b As Long Dim t As Boolean Dim f As Boolean Dim x_max As Long Dim x As Long Dim yp As Long Dim pk As Integer Dim pky As Integer Dim pk_max As Integer Dim pk_min As Integer Range("B:Z").ClearContents 'ilosc danych w kadej kolumnie np. 1040000 x_max = Range("A1").Text 'ilosc kolumn - wartosc max 25 pk_max = Range("A2").Text ' zaczynamy od 2 kolumny pk = 2 pky = 2 pk_min = 2 pk_max = pk_max + 1 t = True ' wartsc pocztkowa dla iteracji yp = 1 i = 0 Do i = i + 1 ' wartsc pocztkowa x dla danej iteracji i x = yp 'wyliczenie wartosci a i b a = 1 + 2 * i If t Then b = 4 * i + 3 Else b = 4 * i + 1 End If ' ustawienie kolejnoci a czy b - t dla iteracji i , f dla poditeracji f = t If Cells(i, pk).Value <> 1 Then If f Then x = x + b yp = x + a Else x = x + a yp = x + b End If 'zaznaczenie elementu dla danej iteracji For j = pk_min To pk_max Do While x < x_max Cells(x, j) = 1 If f Then x = x + a Else x = x + b End If f = Not (f) Loop x = x - x_max + 1 Next j Else yp = yp + a + b End If If Not (yp < x_max) Then yp = yp - x_max + 1 pky = pky + 1 End If pk_min = pky t = Not (t) Loop Until (pky > pk_max) End Sub Wiadomość była modyfikowana 2017-11-26 16:36:31 przez nk_1 |
strony: 1 |
Prawo do pisania przysługuje tylko zalogowanym użytkownikom. Zaloguj się lub zarejestruj