Kezdőoldal » Számítástechnika » Programozás » Olyan prímszámok, melyek...

Olyan prímszámok, melyek szorzatából 1-et kivonva újra prímszámot kapunk?

Figyelt kérdés
Segítsetek kérlek.
2015. máj. 19. 13:53
1 2
 1/14 A kérdező kommentje:
c++ -ban kell de ha pszeudokodot irtok az is jó. köszönöm előre is
2015. máj. 19. 13:54
 2/14 anonim ***** válasza:
2015. máj. 19. 13:57
Hasznos számodra ez a válasz?
 3/14 anonim ***** válasza:
Olyan kérdés, ami nincs félbehagyva?
2015. máj. 19. 14:00
Hasznos számodra ez a válasz?
 4/14 SimkoL ***** válasza:

Ha a legprimitívebb módon kezdünk bele akkor írj egy függvényt ami megállapítja egy számról, hogy prim-e ?

Ha megvan szólj.

2015. máj. 19. 14:12
Hasznos számodra ez a válasz?
 5/14 anonim ***** válasza:

Szia!


Eljárás

int[] primtomb = eltárolt prímek (neten van ezerféle algoritmus rá)

int []szorzatPrimTomb = megfelelő prímek (végeredmény)

int tombmutato = 0

ciklus int aktSzorzando=0 aktSzorzando<primtomb hossza aktSzorzando++

ciklus int aktSzorzo=0 aktSzorzo< primtomb hossza aktSzorzo++

ciklus int aktSzorzat =0 aktSzorzat<primtomb hossza aktSzorzat++


Ha primtomb[aktSzorzando]* primtomb[aktSzorzo] -1 = primtomb[aktSzorzat]

Akkor szorzatPrimTomb[tombmutato] = primtomb[aktSzorzat]

tombmutato ++

Ciklus vége

Ciklus vége

Ciklus vége

Eljárás vége


Eléggé időigényes folyamat, mondhatni egyáltalán nem optimalizált, de házinak=kiindulási pontnak megfelelő.

Remélem érthető volt.


Ryo

2015. máj. 19. 14:15
Hasznos számodra ez a válasz?
 6/14 anonim ***** válasza:

Ja és a tömbmutató növelése persze a ha elágazás igaz ágán belül van...

Ryo

2015. máj. 19. 14:17
Hasznos számodra ez a válasz?
 7/14 SimkoL ***** válasza:

#include <cstdlib>

#include <iostream>

#include <math.h>


using namespace std;


bool prime(int szam){

bool jo = true ;

if (szam == 2) return true;

if ((szam % 2 == 0) || (szam == 1)) return false;

for (int t = 3; t <= sqrt(szam) + 1; t += 2) if (szam % t == 0) jo = false ;

return jo ;

}


int main(){

int a = 2;

for (int b = 1; b < 1000; b++) if (prime(b)) if (prime((a * b) - 1)) cout << a << " x " << b << " - 1 = " << (a * b) - 1 << endl;

system("PAUSE");

return 0;

}


A matematikai részét majd egy tanult ember elmagyarázza, hogy 'a' miért csak a kettő.

2015. máj. 19. 16:47
Hasznos számodra ez a válasz?
 8/14 SimkoL ***** válasza:

Mivel senki sem döngeti az ajtókat ezért megpróbálom elmesélni. Páratlan szám páratlannal való szorzása szintén páratlant eredményez. Most 'dobjuk' ki a kettőt a prímek közül és látjuk, hogy az összes páratlan :) Ha egy páratlan számból egyet elveszünk akkor az páros, innentől már megint csak a kettő játszik az egyik oldalon. A másik sarokban az összes többi prím.

Van aki nem ért egyet ?

2015. máj. 19. 18:46
Hasznos számodra ez a válasz?
 9/14 anonim ***** válasza:

Helyes a meglátásod, a pár egyik tagja a kettő, mert a szorzatnak párosnak kell lennie ahhoz, hogy ha kivonunk belőle egyet prím lehessen. Kivétel ha a szorzat 3 (mert 3-1=2 prím), de nincs két olyan prím aminek a szorzata 3, így ezzel nem kell foglalkozni.


Itt egy megvalósítás Pythonban, 10.000.000-ig pillanatok alatt lefut, 100.000.000-hoz kell pár másodperc de még lassabb gépeken is percen belül van még a "lassú" Pythonban is.


max_number = 1000000


number_list = [False] * max_number

primes = set()


for i in range(2, max_number):

. . if not number_list[i]:

. . . . primes.add(i)


. . . . pair = (i+1)//2

. . . . if pair in primes:

. . . . . . print(2, pair)


. . . . for j in range(2*i, max_number, i):

. . . . . . number_list[j] = True


Semmivel sem bonyolultabb a sokkal gyorsabb eratoszthenészi szita algoritmus prím kereséshez. Jó megírni egyszer kezdőként a mindenki által jól ismert alap algoritmust, de rászokni és/vagy rászoktatni másokat arra elég nagy hiba. Érdemes még megfigyelni a (hash) halmazok használatát, amiknek a komplexitása kereséshez O(1). Későbbiek során jól fog jönni.


[link]

2015. máj. 19. 20:58
Hasznos számodra ez a válasz?
 10/14 anonim ***** válasza:
A kérdező nem mondta, hogy az "olyan prímszámok" 2 prímszámot jelent. Ha ez bármennyi lehet, akkor, akkor csak sorban meg kell keresni a prímszámokat (akármilyen módszerrel is), és prímtényezőkre bontani az 1-gyel nagyobb számot.
2015. máj. 19. 23:01
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!