liczby pierwsze

0

Witam, mam za zadanie napisac program który wczytuje dana liczbe, a nastepnie wyswietla wszystkie liczby pierwsze mniejsze od podanej. Wymyslilem tak sposob - wprowadzam liczbe np 7 w jednej petli, w drugiej petli liczba ta dzielona jest przez liczby od 1-7 i jesli reszta z dzielenia jest wieksza od 0 to rosnie licznik. Jesli licznik jest mniejszy badz rowny dwa (czyli 1 i 2) to program ma wypisac ta liczbe jako pierwsza. W nastepnej serii pierwsza petla pomniejsza o 1 wprowadzona liczbe, a kolejna znow ja dzieli i liczy wartosc licznika. Wygląda to tak:

int PIERWSZA (int a);
int licz = 0 ;

int main(int argc, char *argv[])
{
    int liczba;
    scanf("%d", &liczba);
    
    for(liczba; liczba>0;liczba--)
    {
 PIERWSZA(liczba);
 if(PIERWSZA<=2)
 printf("%d",liczba);
                
}
system("PAUSE");	
  return 0;
  }


int PIERWSZA (int a)
{
 int licznik;
 for(licznik=1;licznik<=a;licznik++)
 {
                                   if(a%licznik > 0)
                                   licz++;
}   
 return licz;   
    
}

Jednak nic sie nie wypisuje.. Gdzie jest błąd? ;/

0
 if(PIERWSZA<=2)

Co za "pierwsza" skąd ty to masz ?

0
 for(liczba; liczba>0;liczba--)

Gdzie do "liczba" przypisujesz wartość?

0

Wydaje mi się,że linijke wyżej w scanf to robie ;)

a PIERWSZA hm - miałem na myśli wartość zwracana przez funkcje PIERWSZA. ;]

0

Ahoj ;)

Mam nadzieje że się nie pogniewasz jak nie będe wyszukiwał błędów ;)
W takich przypadkach szybciej napisać coś działającego.

int liczba;
int i,j,k;

scanf("%d", &liczba);

if ( liczba < 3 ) return 0;

k = 0;

for ( i=2; i<liczba; i++ ) {
  for ( j=2; j<i; j++ ) {
    k = i%j;
    if( k == 0 ) break; 
  }

  if (k) printf("%d\n", i);
}

Jak przeanalizujesz może będzie ci łatwiej.

0

Wolałem iść już swoim tokiem myślenia ;) Przerobiłem i wszystko śmiga ;)


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int liczba,licznik,licz;
  scanf("%d",&liczba);
  printf("\t");
   for(liczba; liczba>0; liczba--)
   {
               for(licznik =1,licz=0; licznik<=liczba;licznik++)
               {
                           if(liczba%licznik == 0 )
                           licz++;
                           }
               if(licz==2)
               printf("%d\n",liczba);            
 }
  system("PAUSE");	
  return 0;
}
0

Zmodyfikuj troszkę swój program, tak by zamiast pokazywać liczby policzył je (np. zamiast printf... wstaw ile++)
Twój program na moim komputerze policzył liczby nie większeod 10'000 w 0,84 sekundy
Zmieniłem tylko odrobinę w twoim programie i w tym samym czasie policzyłem ile jest liczb pierwszych mniejszych od 725'000.
A można jeszcze szybciej!

0
#include <time.h>

int t;
t=clock();
.....
.....
t=clock()-t; // t w milisekundach

by zobaczyć więcej:
-pisz po kilka liczb w wierszu np printf("%10d", liczba)
-można zmienić rozmiar bufora ekranu (prawy klawisz / właściwości)

1 użytkowników online, w tym zalogowanych: 0, gości: 1