I want to get first 10 prime numbers in an array and print it in C. My program is not working for some unknown reasons

Viewed 643

The task is to get the first 10 prime numbers in an array and print it. I don't know why my program is not doing it.

#include <stdio.h>
#include <math.h>

int main()
{
    int flag = 0;
    int arr[10];
    arr[0] = 2;
    int j = 1;
    int num;
    int k;

    for(k = 0,num = 3; k<10; k++,num++) {
        for (int i = 2; i <= sqrt(num); i++) {
            if((num % i) == 0)
                flag = 1;
                break;

        }
        if(flag == 0)
            arr[j++] = num;

    }
    printf("First 10 Prime Numbers: ");
    for (j = 0; j<10; j++)
        printf("%d ", arr[j]);
    return 0;
}
1 Answers

For starters you need to initialize the variable flag in each iteration of the outer for loop before the inner for loop as for example

for(k = 0,num = 3; k<10; k++,num++) {
    flag = 1;
    for (int i = 2; i <= sqrt(num); i++) {
    //...

However it is much better to set the flag in the case when the number is a prime number. For example

for(k = 0,num = 3; k<10; k++,num++) {
    flag = 1;
    for (int i = 2; flag && i <= sqrt(num); i++) {
        if((num % i) == 0) flag = 0;
    }
    if(flag == 1)
        arr[j++] = num;

}

The outer for loop is executed exactly 10 times independent on how many prime numbers were found.

So rewrite the loops at least like

for ( num = 3; j < 10; num += 2 ) {
    flag = 1;
    for (int i = 3; flag && i <= sqrt(num); i += 2) {
        if((num % i) == 0) flag = 0;
    }
    if(flag == 1)
        arr[j++] = num;

}

Here is a demonstration program. I renamed flag to prime.

#include <stdio.h>

int main( void )
{
    enum { N = 10 };
    int arr[N];
    size_t j = 0;
    arr[j++] = 2;

    for ( int num = 3; j < N; num += 2 ) 
    {
        int prime = 1;
        for ( int i = 3; prime && i <= num / i; i += 2 ) 
        {
            if (( num % i ) == 0) prime = 0;
        }

        if ( prime ) arr[j++] = num;
    }

    printf( "First %d Prime Numbers: ", N );
    for (j = 0; j < N; j++) printf( "%d ", arr[j] );
    putchar( '\n' );
}

The program output is

First 10 Prime Numbers: 2 3 5 7 11 13 17 19 23 29
Related