Blad w programie na liczby pierwsze

0

Witam. Mam program który powinien zliczać ile jest liczb pierwszych w zakresie od 2 do n!. Mam jeden błąd ale nie mogę go znaleźć. Proszę pomóżcie.

 #include<stdio.h>
#include<math.h>
int silnia (int i)
	{
	if(i < 1)
	{
	return 1;
	}
	else
	{
	return i * silnia(i - 1);
	}
	}
int main()
{
int n, zakres, ilosc=0, granica, i, j;
int tablica[50];
printf("Podaj liczbe do silni = ");
scanf("%d", &n);
zakres=silnia(n);
for(i=0; i!=zakres; i++)
                {
                tablica[i]=1;
                }

                granica=floor(sqrt(n));
                for(i=2; i!=granica; i++)
                        {
                        if(tablica[i]!= 0)
                                {
                                j=i+i;
                                while(j<=n)
                                {
                                tablica[j]=0;
                                j=j+i;
                                }
                            }
                            }
                            
                            for(i=2; i<=n; i++)
                                {
                                if(tablica[i]!=0)
                                        {
                                        ilosc++;
                                        }
printf("Liczb pierwszych jest: %d", ilosc);
}}
0

nie chce mi się kompilować, ale twój może program będzie działał dla n<=4. bo zadeklarowałeś tablicę statyczną 50-elementową. zmień to

0
  1. Naucz się formatować kod!!
  2. Jeśli masz gotową funkcję czy_pierwsza i silnia, to program może wyglądać tak:
 
int sil = silnia(n);
int licznik = 0;
for(int i=0; i<sil; i++)
{
    if(czy_pierwsza(i))
        licznik++;
}

Oczywiście można to też zrobić poprzez sito Erastotenesa, poczytasz o tym w necie.

0
#include <stdio.h>
    int t[]={0,0,2,3,9,30,128,675,40320,362880,3628800,39916800,479001600,6227020800,87178291200}
    unsigned int n;
int main(){
    scanf("%d", &n);
    if (n<15) 
        printf("%d", t[n]);
}
0

Poprawka

#include <stdio.h>
    int t[]={0,0,2,3,9,30,128,675,4231,30969,  258689,2428956,25306287,289620751};
    unsigned int n;
int main(){
    scanf("%d", &n);
    if (n<14) 
        printf("%d", t[n]);
}
0

@mgr.dobrowolski, ja znam tylko jedną liczbę pierwszą w zakresie od 2 do 2!=2. Jaka jest ta druga?

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