Witam
Jestem studentem pierwszego roku informatyki. W związku z tym ,że nadchodzi dużymi krokami egzamin z podstaw programowania postanowiłem sobie ,że w ramach nauki do egzaminu zrobię raz jeszcze zadania , które robiliśmy
przez cały semestr na laboratoriach jednak postanowiłem je troszeczkę przerobić. Postanowiłem każde zadanie robić na funkcjach mimo tego że zadanie tego nie wymaga , żeby jak najlepiej nauczyć się funkcji ale do rzeczy.
Mam takie oto zadanie:Wprowadź liczbę całkowitą N. Sprawdź, ile liczb z zakresu 2..N jest liczbami pierwszymi.
Napisałem taki oto kod programu :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int czy_pierwsza(int n)
{
int i;
for(i=2;i<sqrt(n);i++)
{
if(n%i==0)
{
return(0);
break;
}
}
return(1);
}
void ile_liczb(int n1,int n2)
{
int i , ile=0;
for(i=n1;i<n2;i++)
{
if(czy_pierwsza(i)==1)
{
printf(" %d\t",i);
ile=ile+1;
}
}
printf("\nW podanym przedziale jest %d liczb pierwszych \n\n",ile);
}
int main(void)
{
int n1,n2;
printf("podaj dolny zakres: ");
scanf("%d",&n1);
printf("Podaj dolny zakres: ");
scanf("%d",&n2);
printf("Liczby pierwsze w zakresie od %d do %d to: \n",n1,n2);
ile_liczb(n1,n2);
system("pause");
return (0);
}
Moim zdaniem program działa prawie dobrze , jedynym problemem jest to ,że jak dam sobie przykładowo zakres od 2 do 10 to program wyświetla mi takie liczby jak 2 , 3 , 4 , 5 , 7 , 9 a przecież 4 nie jest liczbą pierwszą.Podobnie się dzieje jak podam zakres od 2 do 100 to program wyświetla oprócz liczb pierwszych liczby 25 , 29 , 49 itp. , które też nie są liczbami pierwszymi.Drugi problem mam taki , że nie wiem gdzie i dać printfa , że niema liczb pierwszych w przedziale bo gdy w funkcji ile_liczb dodam elsa to też za każdym razem mi wyskakuje najpierw kilka liczb pierwszych z przedziału a potem komunikat że nie ma liczb pierwszych. Próbuję już od dłuższego czasu znaleźć błąd ale nie mogę.Czy ktoś może mi pomóc w tym problemie?. Z góry dziękuję
pozdrawiam