n pierwszych liczb pierwszych

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;
} 
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...

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;
} 
1
#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.

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