n pierwszych liczb pierwszych

2017-03-14 20:57

Rejestracja: 3 lata temu

Ostatnio: 3 miesiące temu

0

Program mi działa, tylko że chce aby wyświetlała co 2 liczbe pierwszą, i dlatego dodałem instrukcje if(to_write == true) to_write = false; else to_write = true;
i tylko wyświetla mi 1 liczbę, naprawdę nie wiem dlaczego

#include <stdio.h>
#include <stdbool.h>

void prime_numb_second(long amount)
{
    long prime_numb, i;
    bool to_write = true;
    for (prime_numb = 2; prime_numb <= amount; ++prime_numb) {
        i = 2;
        do {
            if (i > prime_numb / 2  && to_write == true) {
                printf("%d\t", prime_numb);
                break;
            }
            if (prime_numb % i == 0)
                break;
            ++i;

        } while (1);

    if(to_write == true)
              to_write = false;
        else  to_write = true;
    }
}

int main(void)
{

    prime_numb_second(20);

    return 0;
} 

Pozostało 580 znaków

2017-03-14 21:16

Rejestracja: 3 lata temu

Ostatnio: 6 godzin temu

0

Tak na szybko, to prościej byłoby zrobić zwykły licznik:

  • każda liczba pierwsza -> licznik++
  • jeśli licznik%2 == 0 to wyświetl liczbę pierwszą

To chyba tyle...

%2 to nie liczba pierwsza - bartek164 2017-03-14 21:21
ilość znalezionych liczb pierwszych % 2, a nie sama liczba - sig 2017-03-14 21:40
co? o czym wy mówicie - bartek164 2017-03-14 21:41

Pozostało 580 znaków

2017-03-14 21:50

Rejestracja: 3 lata temu

Ostatnio: 3 miesiące temu

0

Ja to zrobiłem tak, ale nie chciałem do tego używać tablicy, a zamiast tego instukcje warunkowe if (true ) ....

#include <stdio.h>
#include <stdbool.h>

void prime_numb_second(long amount)
{
    long prime_numb, i, j = 0;
    long tab[amount];
    bool to_write = true;
    for (prime_numb = 2; prime_numb <= amount; ++prime_numb) {
        i = 2;
        do {
            if (i > prime_numb / 2 && to_write == true) {
                tab[j] = prime_numb;
                ++j;
                break;
            }
            if (prime_numb % i == 0)
                break;
            ++i;

        } while (1);
    }
    for (i = 0; i < j; i += 2)
        printf("%d\t", tab[i]);
}

int main(void)
{

    prime_numb_second(20);

    return 0;
} 

Pozostało 580 znaków

2017-03-14 22:25

Rejestracja: 3 lata temu

Ostatnio: 1 rok temu

#include <stdio.h>
#include <stdbool.h>

void prime_numb_second(long amount)
{
    long number, i, j = 1;
    bool is_prime = false;

    for (number = 2; number <= amount; ++number) 
    {
        is_prime = true;
        for (i = 2; i <= number/2; ++i)
        {
            if (number % i == 0)
            {
                is_prime = false;
                break;
            }
        }
        if (is_prime)
        {
            if (j%2)
            printf("%d\t", number);
            j++;
        }
    }
}

int main(void)
{ 
    prime_numb_second(20);
    printf("\n");
    return 0;
}  

Przepraszam że nie uchwyciłem artystycznego i porażającego piękna twojego kodu, ukazującego zarazem ład i chaos we wszechświecie, no ale nie jestem taki dobry... tak czy siak ująłem w kod mam nadzieję nieco mniej absorbujący zasoby mózgowe.

Pokaż pozostałe 8 komentarzy
ale mi się wydaje że jest przejrszysty, po za tym długo go robiłem, nie jestem taki dobry :(((( - bartek164 2017-03-14 22:52
no ja wiem że na początku wręcz trzeba tworzyć pogmatwany kod, tak tylko zwróciłem uwagę jak ja go widzę i jak potencjalni czytelnicy mogą go widzieć, do prostych do rozszyfrowania nie należy, chwilę mi zajęło zanim przebrnełem przez to do..while i breaki, no ale ćwicz to będziezs pisał lepiej. - czaffik 2017-03-14 22:56
mam nadzieję :((( - bartek164 2017-03-14 23:00
ta rozmowa ;-). bartuś Twój kod nie jest taki tragiczny ale wyluzuj to tylko krytyka. - wujnia 2017-03-14 23:19
no dobra -.- - bartek164 2017-03-14 23:20

Pozostało 580 znaków

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