Program wypisuje do pliku liczby pierwsza z zakresu n do m podane przez uzytkownika

0

witam potrzebuje pomocy, moim zdaniem co z tymi petlami jest nie tak :(((

nt main()
{
int a,i,j,k=0;
printf("podaj przedzial\n");
scanf("%d",&a);

            for(i=1;i<=a;i++)
            {
                for(j=2;j<i;j++)
                {
                    k=0;
                    if(i%j==0)
                    {
                        k+=1;
                    }
                    if(k==0)
                    {
                        printf("pierwsza %d \n",i);
                        FILE*F;
                    F=fopen("plik.txt","w");
                    fprintf(F,"%d ",n);

                    }
                }

            }

return 0;

2

Zerujesz k przy każdym obrocie pętli j, nic dziwnego że ci nie działa (powinieneś to robić pętlę wyżej). Swoją stroną zrób lepiej funkcję zwracającą True albo False, i pamiętaj że starczy liczyć póki j * j < = i, jak do tego miejsca nie ma dzielników to już ich z pewnością nie będzie (bo wynik dzielenie sam jest dzielnikiem).

ps na przyszłość wklejaj kody w stosownym tagu.

0

Dzięki za zwrócenie uwagi z tym k poprawiłem do takiego momentu, lecz wynik średnio mnie zadowala bo wyświetla po kilka razy tą samą liczbę rozumiem, żę coś z petlą poprawić jeszcze ? dodaje załącznik.pierwsze.jpg

0

Wypisywanie też przesuń z J do i . Swoją drogą czemu nie zrobisz tego tak? Jeśli jest niepodzielna przez 2, to automatycznie przez wszystkie parzyste też i można od 3 co drugą sprawdzać. To samo zresztą z pozostałymi pierwszymi, gdybyś znał górną granicę dopuszczalnego zakresu mógłbyś zrobić liczbę pierwszych mniejszych niż pierwiastek z niego, i sprawdzać tylko liczby z tej tablicy.

bool czypierwsza(int liczba)
{
    if (liczba % 2 == 0) return false;
    for (int i = 3; i * i <= liczba; i = i + 2)
    {
        if (liczba % i == 0) return false;
    }
    return true;
}
0

ale jak moge przesunac jesli wypisywanie jest tylko i wylacznie wtedy kiedy spelniony jest warunek?
Ta logika ktora obralem tutaj nie mowie ze jest idealna ale dla mnie jest po prostu prosta :D

1

Ale k jest poza pętlą j, więc możesz zrobić tak:

#include <stdio.h>


int main()
{
    int a = 0;
    printf("podaj przedzial\n");
    scanf("%d",&a);

            for(int i=1;i<=a;i++)
            {
            	int k = 0;
                for(int j=2;j<i;j++)
                {
                    if(i%j==0)
                    {
                        k+=1;
                    }
                }
                if(k==0)
                {
                    printf("pierwsza %d \n",i);
                }
            }


return 0;
}
0

wielkie dzieki za pomoc

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