Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Nalazenje prostih brojeva metodama koje su imale propuste (izostavljale pojedina resenja)

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Nalazenje prostih brojeva metodama koje su imale propuste (izostavljale pojedina resenja)

[ Pregleda: 2560 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Loodack
Beograd

Član broj: 113883
Poruke: 10
*.eunet.rs.



Profil

icon [Zadatak] Nalazenje prostih brojeva metodama koje su imale propuste (izostavljale pojedina resenja)03.01.2009. u 15:49 - pre 186 meseci
Dobio sam za seminarski da napisem neki programcic, pa mi treba pomoc.
Elem, zadatak glasi ovako:

U istoriji matematike predlagane su razne formule za generisanje
prostih brojeva. Ispostavilo se da su mnoge od njih bile pogresne, tj. pronadeni su slucajevi u
kojima ne generisu proste brojeve.
Napisati program u kojem bi se koristile bar tri takve formule i za svaku od njih pronalazio bar jedan
slucaj za koji formula ne daje prost broj.
Uputstvo. Jedna od takvih formula (ciji autor nije poznat) bila je
xn = n^2 + n + 41
Jos jedna formula, slicna prethodnoj, je:
xn = n^2 - 79n + 1601
U prvoj polovini 17. veka, Mersen je uveo pretpostavku da su brojevi oblika
2p - 1
prosti brojevi kad god je p prost broj. Ovakvi brojevi, u oznaci Mp, poznati su pod nazivom
Mersenovi brojevi. Mersenov broj M127 = 2^127 - 1, dugi niz godina drzao je rekord kao najveci
poznati prost broj. Na zalost, Mersenova pretpostavka nije bila tacna. Postoji veci broj Mersenovih
brojeva koji nisu prosti. Dakle, i Mersenovu formulu mozemo svrstati u prethodnu grupu.


Evo kako sam ja poceo:

#include<stdio.h>
#include<math.h>

int prost(int n);

int main(){
int i=1,k=1;
int n;

n=i*i+i+41;
while (prost(n)==1)
{
n=i*i+i+41;
i++;
}
printf("Prvi prost broj za koji ne vazi formula n^2 + n + 41 je: %d\n",n);

getchar();
getchar();
}

int prost(int n)
{
float k;
int i;

if ((n%2==0 && n!=2) || n==1)
return 0;

k=sqrt(n);
for(i=3; i<=k; i+=2)
if (n % i == 0)
return 0;
return 1;
}


E sad, znam da ovo nije najsrecnije resenje.. zapravo, cudim se sto uopste radi.
Za drugu formulu isto to ne radi, tj. dobijam 1523 koji je prost, a trecu nisam ni probao..
Ako moze neka pomoc.. Hvala.
 
Odgovor na temu

Loodack
Beograd

Član broj: 113883
Poruke: 10
*.eunet.rs.



Profil

icon Re: [Zadatak] Nalazenje prostih brojeva metodama koje su imale propuste (izostavljale pojedina resenja)04.01.2009. u 18:33 - pre 186 meseci
Neko? Molim vas, lak je program pobogu :A
 
Odgovor na temu

boris Dj.bl
Dipl.ing.
Banjaluka

Član broj: 167469
Poruke: 77
62.68.98.*



Profil

icon Re: [Zadatak] Nalazenje prostih brojeva metodama koje su imale propuste (izostavljale pojedina resenja)08.01.2009. u 00:05 - pre 186 meseci
Jel ti ovo treba

Code:

#include<stdio.h>
#include<math.h>

int prost(int n);

int main(){
    int i=1,k=1,n;
    n = i*i+i+41;
    while (prost(n)==1) {
       n = i*i+i+41;
       i++;
    }
    printf("Prvi broj koji nije prost od formule n^2 + n + 41 je: %d (n=%d)\n",n,i-1);

    i = 1;
    n = i*i-79*i+1601;
    while (prost(n)==1) {
       n = i*i-79*i+1601;
       i++;
    }
    printf("Prvi broj koji nije prost od formule n^2 + -79n + 1601 je: %d (n=%d)\n",n,i-1);

    i = 3;
    do {
       if(prost(i)==1)
          if(prost(2*i-1)==0) break;
       i+=2;
    } while(1);
    printf("Prvi broj koji nije prost od formule 2n-1 je: %d (n=%d)\n",2*i-1,i);

    getch();
}

int prost(int n) {
   if ((n%2==0 && n!=2) || n==1)
      return 0;
   int k,i,p=1;
   k=sqrt(n);
   for(i=3; i<=k; i+=2)
      if (n % i == 0)
         return 0;
   return 1;
}


Inace program kao izlaz daje ovo:

Citat:

Prvi broj koji nije prost od formule n^2 + n + 41 je: 1681 (n=40)
Prvi broj koji nije prost od formule n^2 + -79n + 1601 je: 1681 (n=80)
Prvi broj koji nije prost od formule 2n-1 je: 9 (n=5)
 
Odgovor na temu

Loodack
Beograd

Član broj: 113883
Poruke: 10
*.eunet.rs.



Profil

icon Re: [Zadatak] Nalazenje prostih brojeva metodama koje su imale propuste (izostavljale pojedina resenja)08.01.2009. u 15:26 - pre 186 meseci
Valjda to treba, tako osam ja shvatio. Hvala puno.
S tim sto treba 2^p-1 (glupi adobe reader), al to cu da sredim valjda :\

[Ovu poruku je menjao Loodack dana 08.01.2009. u 16:45 GMT+1]
 
Odgovor na temu

boris Dj.bl
Dipl.ing.
Banjaluka

Član broj: 167469
Poruke: 77
62.68.98.*



Profil

icon Re: [Zadatak] Nalazenje prostih brojeva metodama koje su imale propuste (izostavljale pojedina resenja)08.01.2009. u 20:13 - pre 186 meseci
Evo ti i sa 2^p-1, samo ovaj dio koda zamijeni

Code:

i = 3;
    int p;
    do {
       if(prost(i)==1) {
          p = pow(2,i)-1;
          if(prost(p)==0)
          break;
       }
       i+=2;
    } while(1);
    printf("Prvi broj koji nije prost od formule 2^n-1 je: %d (n=%d)\n",p,i);


Inace broj je 2047.
 
Odgovor na temu

Loodack
Beograd

Član broj: 113883
Poruke: 10
*.eunet.yu.



Profil

icon Re: [Zadatak] Nalazenje prostih brojeva metodama koje su imale propuste (izostavljale pojedina resenja)08.01.2009. u 22:39 - pre 186 meseci
Da da, uspeo sam to :)
Hvala puno jos jednom :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Nalazenje prostih brojeva metodama koje su imale propuste (izostavljale pojedina resenja)

[ Pregleda: 2560 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.