[Pomoć][C] Pronaći Mersenove proste brojeve

Teme vezane za console/GUI programiranje u C/C++ jeziku
11 post(ov)a • Stranica: 1/2.1, 2

[Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la nemesis » 24 vel 2016, 12:58

Pozdrav ljudi. Zapeo sam oko jednog zadatka, nikako da ga riješim, vjerujem da je rješenje glupavo, al nemam izbora, evo kako zadatak glasi

Napisati program koji ucitava prirodan broj n, a zatim ispisuje prvih n
Mersenovih brojeva. Mersenovi prosti brojevi su prosti brojevi oblika pow(2, k)-1
, k >= 2. Prirodan broj veci od jedan je prost ako je djeljiv samo sa jedan i
samim sobom

Ovo znaci da eksponent k treba da bude prost broj kako bi i rezultat bio prost broj, npr. ako unesem da je n = 4, brojeve koje treba da dobijem su

2^2 - 1 = 3
2^3 - 1 = 7
2^5 - 1 = 31
2^7 - 1 = 127

Nadam se da razumijete o cemu je rijec. Ono sto meni zadaje najvecu muku jeste eksponent k, ne znam kako da pravim proste eksponente tj ne znam
kada da prekinem k ako idem od 1 do n. Nije dozvoljeno koristenje funkcija ni biblioteka math.h, znaci samo osnovne funkcije i cista matematika

Re: [Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la Jasko » 25 vel 2016, 21:31

Evo mog rjesenja.

cpp code
#include <stdio.h>

int jeProst(int br){
int i = 2;
while(i<br){
if(!(br % i)) return 0;
i = 2*i-1;
}
return 1;
}

int mojPow(int x,int y){
if(y==0) return 1;
return x*mojPow(x,y-1);
}

int main(){
int n = 7;
int k = 2;
while(n>0){
if(jeProst(k)){
printf("%d^2 - 1 = %d \n", k, mojPow(2,k)-1);
n--;
}
k++;
}

}
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.

Re: [Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la nemesis » 26 vel 2016, 00:41

naveo sam u tekstu, zadnja recenica, kaze bez funkcija i math.ha biblioteke

Re: [Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la Jasko » 26 vel 2016, 10:32

Sve sto je u funkcijama moze se, ubacit dole, uz paar dodatnih pomocnih varijabli na isti nacin radi.

Rekursivna funkcija radi i preko while petlje bez problema, sve isprobano. Ali da bi imao sta od mog rjesenja, moras sam postat aktivan, samo prepisat nece ti pomoc, a bio je cilj da skontas, ako treba mojPow funkciju cu ti napisat proceduralno.

A math.h nisam koristio. sve su moje funkcije i matematika.

Evo ti mojPow proceduralno
cpp code
int mojPow(int x,int y){
int rez = 1;
int i;
for(i=0; i < y; i++){
rez = rez * x;
}
return rez;
}


u sustini samo funkcije moras sad ubacit dole u main, da se ne pozivaju nego da se rade u petlji. Imam i za to gotov Code, ali kada sam dodjes do rjesenja, bolji je osjecaj, ako nemoze reci da rjesenje postavim.

Pozz
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.

Re: [Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la nemesis » 29 vel 2016, 18:31

pokusavao sam, nesto sam brljavio al nisam uspio, evo dokle sam dosao, znam i gdje grijesim al ne znam kako da rijesim problem, moze rjesenje?

cpp code
#include<stdio.h>

int main()
{
int n, i, k = 2, flag = 1, j, ms, p;

do
{
printf("Unesi n: ");
scanf("%d", &n);
}
while(n < 0);

while(n > 0)
{
for(i = 2; i <= k; i++)
{
if(k % i == 0)
{
flag = 0;
break;
}

if(flag == 1)
{
i = 2*i - 1;
}
}

ms = 1;

for(j = 1; j <= i; j++)
{

ms *= 2;
}

printf("%d\n", ms-1);
k++;
n--;
}

return 0;
}

Re: [Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la Jasko » 01 ožu 2016, 10:27

Evo moje rjesenje:

cpp code
#include <stdio.h>

int main(){
int n = 7; //nisam pravio unosa za ovu varijablu, jer je jasno kako to ide
int k = 2;
while(n>0){
int i = 2;
int jeProst = 1;
int rez = 1;
int t;
while(i<k){
if(!(k%i)) {
jeProst = 0;
break;
}
i = 2*i-1;
}
if(jeProst){
for(t=0; t < k; t++){
rez = rez * 2;
}
printf("2^%d - 1 = %d \n", k, --rez);
n--;
}
k++;
}
}


ali posto se brzo dobije preliv za int, ja preporucujem ovu varijantu:
cpp code
int main(){
int n = 14;
int k = 2;
while(n>0){
int i = 2;
int jeProst = 1;
double rez = 1.0;
int t;
while(i<k){
if(!(k%i)) {
jeProst = 0;
break;
}
i = 2*i-1;
}
if(jeProst){
for(t=0; t < k; t++){
rez = rez * 2;
}
//prikazuje sve brojeve do 15 cifara normalno, nakon toga prikazuje brojeve eksponencijalno (1e+10)
printf("2^%d - 1 = %.15g \n", k, --rez);
n--;
}
k++;
}
}
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.

Re: [Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la nemesis » 01 ožu 2016, 14:25

rijesio na preko for petlji, nekako ih vise volim mada su while prakticnije pogotovo za ove stvari, problem sam pravio tako sto sam u for petlji povecavao i za i++ pa nakon provjere prostog broja povecavao sam za i = 2*i - 1 sto je petlju naravno zbunjivalo, takodjer sam na pogresnim mjestima resetovao neke vrijednosti. Hvala Jasko na pomoci, a evo mog rjesenja

cpp code
#include<stdio.h>

int main()
{
int n, i, j, k = 2, ms = 1, flag;

do
{
printf("Unesi n: ");
scanf("%d", &n);
}while(n < 0);

while(n > 0)
{
flag = 1;

for(i = 2; i < k; )
{
if(!(k % i))
{
flag = 0;
break;
}

i = 2*i - 1;
}

if(flag)
{
ms = 1;
for(j = 0; j < k; j++)
{
ms *= 2;
}

printf("2^%d - 1 = %d\n", k, --ms);
n--;
}

k++;
}

return 0;
}

Re: [Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la Jasko » 01 ožu 2016, 16:24

Evo mali savjet kako mozes napisat prvu for petlju:

cpp code
for(i = 2; i < k; i = 2*i - 1)
{
if(!(k % i))
{
flag = 0;
break;
}

}


pozz
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.

Re: [Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la zadatak20 » 18 tra 2016, 14:41

napisati funkciju koja za uneti ceo broj N prikazuje da li je broj prost.
Ako uneti broj nije prost broj, funkcija prikazuje prvi prost broj koji je veci od unetog broja N

Treba mi resenje za ovaj zadatak u C programskom jeziku hitno #:-s #:-s #:-s

Re: [Pomoć][C] Pronaći Mersenove proste brojeve

PostPostao/la zadatak20 » 18 tra 2016, 14:44

Jasko je napisao/la:Sve sto je u funkcijama moze se, ubacit dole, uz paar dodatnih pomocnih varijabli na isti nacin radi.

Rekursivna funkcija radi i preko while petlje bez problema, sve isprobano. Ali da bi imao sta od mog rjesenja, moras sam postat aktivan, samo prepisat nece ti pomoc, a bio je cilj da skontas, ako treba mojPow funkciju cu ti napisat proceduralno.

A math.h nisam koristio. sve su moje funkcije i matematika.

Evo ti mojPow proceduralno
cpp code
int mojPow(int x,int y){
int rez = 1;
int i;
for(i=0; i < y; i++){
rez = rez * x;
}
return rez;
}


u sustini samo funkcije moras sad ubacit dole u main, da se ne pozivaju nego da se rade u petlji. Imam i za to gotov Code, ali kada sam dodjes do rjesenja, bolji je osjecaj, ako nemoze reci da rjesenje postavim.

Pozz


Josko, da li bi mi mogli pomoci oko zadatka koji sam postavila kao pitanje u forumu_\?
Unapred hvala


11 post(ov)a • Stranica: 1/2.1, 2

Na mreži

Trenutno korisnika/ca: / i 1 gost.