C program for prime number

To understand better please read the following post first, it will clear your concept of prime number What is prime number and Why 1 is not a prime number?


#include<stdio.h>

int main(){
    int n, i,check;
    printf("Enter a positive number\n");
    scanf("%d",&n);
    for(i=2;i<=n/2;i++){

        if(n%i==0) {
            check = 1;
            break;
        }
    }

    if(check==1)
        printf("\n%d is not a prime number\n",n);
    else
        printf("\n%d is a prime number\n",n);

    return 0;
}

Logic: The above program takes an integer n to check whether it is prime and use two control variables i & check Since every number is divisible by 1 so we started from i = 2. And i will be up to n/2. Why n/2 and why not n Because if we divide n, by any number between n/2 and n it will give us a remainder. For example if we divide 12 by 7(12÷2 < 7) it will remain 5, in case of 9 it will remain 3. That makes if(n%i==0) false every time. So if we take n it just increase time complexity.

Then we divide n with 2 to n/2 if it divide without any remainder, we set check = 1 And show it as not a prime.

Another one


#include<stdio.h>
int main(){
    int min, max, i,count;

    printf("Enter the first end point\n");
    scanf("%d",&min);
    printf("Enter the second end point\n");
    scanf("%d",&max);
    printf("\n\n");
    for(i=min;i<=max;i++){
        for(count=2;count<=i;count++){
            if(i%count==0) break;
        }
        if(count==i) printf("%d\n",count);
    }

    return 0;
}


Here we also use the same logic to find out the prime number from an interval.


Why 1 is not a prime number?

We know that the prime numbers are 2, 3,5, 7, 11, 13, … … …, it starts from 2 because One is not a prime number.

Why one is not a prime number?

It explanation is on the following.

The fundamental theorem of arithmetic Or Factorization Theorem: The fundamental theorem of arithmetic states that every positive integer (except the number 1) can be represented in exactly one way apart from rearrangement as a product of one or more primes (MathWorld)

From the definition we got two factors

  1. product of one or more primes
  2. can be represented in exactly one way

Lets consider 12, the factors of 12 are 1, 2, 3, 4,6 and 12. So if we represent 12 as the product of primes then 12= 2x2x3
But we can not take 1x2x2x3(Extra 1 is multiplied)
Or we can’t take 1x1x2x2x3 (Extra two 1’s is multiplied)
or even we can’t take 1x1x1x2x2x3 (Extra three 1’s is multiplied). Though all these makes 12.

Thus we can represent 12 in many ways if take ‘1’ as a prime number. We cant take these because it violates our second factor "can be represented in exactly one way". So excluding the ‘1’ we represent 12 in exactly one way as a product of three primes(2,2,3).

More example 14=2x7 not (1x2x7 or 1x1x2x7)
51 =3x17 not (1x3x17 or 1x1x317)
So to maintain The fundamental theorem of arithmetic Or Factorization Theorem formula we apart ‘1’ from series of prime numbers.

But, is ‘1’ is a compound number? Nope!! as we know that compound number are those which can be represent as the product of integer number. Example 24 is a compound number as it can be written as 4x6.

So what is ‘1’ actually? According to mathematician we can define it as “Unit Number”


If anyone wish to see the Bangla version of this post See it here

Matrix addition and subtraction in C using arrays

Consider 4 matrices, A, B,C and D, we are going to add A and B and keep on C. (A+B = C). And will subtract B from A and keep it on D.(A-B=D).

First we need to check that the number of rows of matrix A is equal to the number of rows of matrix B, Also we should perform the same check in case of column. But in our program we assume that number of rows of A and B are equal, as well as the column of A is equal to column of B. Then we goes

c[00]=a[00]+b[00], c[01]=a[01]+b[01]… and so on.
d[00]=a[00]-b[00], c[01]=a[01]-b[01]… and so on.

Lets coding this simple Program.


#include<stdio.h>

int main(){
    int a[10][10],b[10][10],c[10][10],d[10][10], row, col,i,j;

    printf("Enter the rows number of both matrices\n");
    scanf("%d",&row);
    printf("Enter the columns number of both matrices\n");
    scanf("%d",&col);


        printf("Enter the elements of matrix A\n");
        for(i=0;i<row;i++){
            for(j = 0;j < col;j++){
                printf("Enter the element at [%d%d] : ",i,j);
                scanf("%d",&a[i][j]);
            }
            printf("\n");

        }

        printf("Enter the elements of matrix B\n");
        for(i=0;i<row;i++){
            for(j = 0;j < col;j++){
                printf("Enter the element at [%d%d] : ",i,j);
                scanf("%d",&b[i][j]);
            }
            printf("\n");

        }

        printf("The addition of A and B is \n\t\t");
        for(i=0;i<row;i++){
            for(j = 0;j < col;j++){
                c[i][j]=a[i][j] + b[i][j];
            }
        }
        //printing addition
        for(i=0;i<row;i++){
            for(j = 0;j < col;j++){
                printf(" %d ",c[i][j]);
            }
            printf("\n\t\t");
        }


        printf("\nThe subtraction of A and B is \n\t\t");
        for(i=0;i<row;i++){
            for(j = 0;j < col;j++){
                d[i][j]=a[i][j] - b[i][j];
            }
        }

        //printing subtraction
        for(i=0;i<row;i++){
            for(j = 0;j < col;j++){
                printf(" %d ",d[i][j]);
            }
            printf("\n\t\t");
        }



    return 0;
}




C program to find sum of diagonal elements in a matrix

Row-major order and Column-major order: In computing, row-major order and column-major order describe methods for arranging multidimensional arrays in linear storage such as memory. The difference is simply that in row-major order, consecutive elements of the rows of the array are contiguous in memory; in column-major order, consecutive elements of the columns are contiguous.(Wiki)

C Supports Row-major order: That means if we represents a two dimensional matrix in C, At first It will traverse the first row then second row and so on.

Square Matrix: We know that square matrix is a matrix whose ROW and COLUMN are equal. If a square matrix of size n then ROW = COLUMN = n. Now see a square matrix. On which we will manipulate the main diagonal elements, elements above main diagonal, elements bellow the main diagonal.

two dimensional matrix in c

From the above image we can see that the indexes of all the diagonal elements follow a general rule, that is ROW = COLUMN, here [00], [11], [22] and [33].

Above the main diagonal we have [01], [02], [03], [12], [13] and [23]. Now notice carefully that, all these indexes follows ROW < COLUMN.

Now we have those elements which are bellow the main diagonal these are, [10], [20], [21], [30], [31], and [32]. in these case ROW > COLUMN. Now lets start with code……

#include <stdio.h>

int main(){
    int mat[10][10], array_size, row=0, col=0, diagonalSum=0, aboveSum=0, bellowSum=0;

    printf("Enter the array size\n");
    scanf("%d",&array_size);
    printf("Enter the elements of matrix\n");

    for(row=0;row<array_size;row++){
        for(col = 0;col<array_size;col++){
            printf("Enter the element at [%d%d] : ",row,col);
            scanf("%d",&mat[row][col]);
        }
        printf("\n");

    }
    // Sum of diagonal element ROW = COLUMN
    printf("The diagonal elements are \t");
    for(row=0;row<array_size;row++){
        for(col = 0;col<array_size;col++){
            if(row==col){
                printf(" %d, ",mat[row][col]);
                diagonalSum += mat[row][col];
            }
        }
    }

    printf("\nAnd the sum is %d\n\n",diagonalSum);

    // Sum of elements above diagonal  ROW < COLUMN
    printf("The elements above diagonal are \t");
    for(row=0;row<array_size;row++){
        for(col = 0;col<array_size;col++){
            if(row<col){
                printf(" %d, ",mat[row][col]);
                aboveSum += mat[row][col];
            }
        }
    }

    printf("\nAnd the sum is %d\n\n",aboveSum);

    // Sum of elements bellow diagonal  ROW > COLUMN
    printf("The elements bellow diagonal \t");
    for(row=0;row<array_size;row++){
        for(col = 0;col<array_size;col++){
            if(row>col){
                printf(" %d, ",mat[row][col]);
                bellowSum += mat[row][col];
            }
        }
    }

    printf("\nAnd the sum is %d\n\n",bellowSum);

    return 0;
}



Matrix multiplication in C with explanation

We should have basic knowledge on the representation of two dimensional matrix in C. Here is three two dimensional matrix a, b and c. a for matrix A, b for matrix B, and c for matrix C. which holds the multiplication result. i, j, k are control variable and sum is needed to hold the summation of the consecutive two products.

#include <stdio.h>
int main()
{

   int a[2][2] = {3,4,2,7};
   int b[2][2] = {6,8,5,9};
   int c[2][2], i, j, k, sum;

   printf("Matrix A is : \n\t\t");
   for(i=0;i<2;i++){
    for(j=0;j<2;j++){
        printf("%d \t",a[i][j]);    }
    printf("\n\t\t");
   }

   printf("\nMatrix B is : \n\t\t");
   for(i=0;i<2;i++){
    for(j=0;j<2;j++){
        printf("%d \t",b[i][j]);
        }
    printf("\n\t\t");
   }

   printf("\nMultiplication of matrix A and B\n\t\t");
   for(i=0;i<2;i++){
    for(j=0;j<2;j++){
        sum = 0;
        for(k=0;k<2;k++){
            sum = sum + a[i][k] * b[k][j];
             }
        c[i][j]=sum;
    }
   }
     printf("\nMatrix A*B is : \n\t\t");
    for(i=0;i<2;i++){
    for(j=0;j<2;j++){
        printf("%d \t",c[i][j]);
      }
    printf("\n\t\t");
   }

return 0;
}

Traversing a matrix

Let us consider the traversing of matrix A, we use here two for loop. One is nested in another, now consider for the first time printf("%d \t",a[i][j]); at the first time i and j enter the loop with value i=0 and j=0; so it represent the first element of matrix A with a[0][0]=3, After the first iteration j increase it's value by j =1 and the inner loop is also true in this case so it point a[0][1] = 4; At the next iteration j= 2 so the for loop is false as 2 is not greater than 2. so it execute the next line printf("\n\t\t"); which prints a new line and two tab after printing a[0][0]=3 and a[0][1] =4,

Now lets talk about the outer loop, for(i=0;i<2;i++) by this time i = 1 and then it enter the inner loop for(j=0;j<2;j++) again it runs two times and results a[1][0]=2 and a[1][1]=7.

Graphical Representation of matrix multiplication

Matrix Multiplication

It uses three for loops, the control variables are i, j, k, at the first iteration all these control variables including sum are zero so,
sum = sum + a[i][k] * b[k][j]
=> 0+a[i][k] * b[k][j]
=> 0+ a[0][0]=3 * b[0][0]= 6
=> 3*6=18
so sum =18, At the next iteration k=1, and still i=0 also j=0 therefore

sum = sum + a[i][k] * b[k][j]
=> 18+a[0][1]*b[1][0]
=>18+4*5
=>18+20
=38

At the next iteration k gets 2 so it becomes false and go to the upper loop (control variable j) and brings j=1, and still i=0, and sum initialize with 0;

sum = sum + a[i][k] * b[k][j]
=> 0 + a[i][k] * b[k][j]
=> 0 + a[0][0]=3 * b[0][1]= 8
=> 3*8=24,

At the next iteration k=1, therefore

sum = sum + a[i][k] * b[k][j]
=> 24+a[0][1]*b[1][1]
=> 24+4*9
=> 24+36=60.

And thus 47, 97 comes correspondingly.

Exception

From the above program we can see that the column of matrix A and the row of matrix B are equal 2=2,This rule must be maintain in matrix multiplication

Column number of first matrix must be equal to the row number of the second matrix

Now lets try with another programm

#include <stdio.h>
int main()
{

   int a[12][12], b[12][12] ,c[12][12], rowa, cola, rowb,colb, i, j, k, sum;

   printf("Row of the first matrix\n");
   scanf("%d",&rowa);
   printf("Column of the first matrix(a) \n");
   scanf("%d",&cola);

    printf("Enter the elements of first matrix\n");
    for (  i = 0 ; i < rowa ; i++ ){
        for ( j = 0 ; j < cola ; j++ ){
      scanf("%d", &a[i][j]);
        }
    }

   printf("Row of the second matrix\n");
   scanf("%d",&rowb);
   printf("Column of the second matrix(b) \n");
   scanf("%d",&colb);

   if(cola != rowb){
        printf("The row number of the second matrix(b) should be %d\n",cola);
        printf("Column of first matrix must be equal to the number of row of the second matrix.\n");
        printf("Run the program again.\n");
   }

   else{
        printf("Enter the elements of second matrix\n");
        for (  i = 0 ; i < rowb ; i++ ){
            for ( j = 0 ; j < colb ; j++ ){
            scanf("%d", &b[i][j]);
            }
        }

      printf("\nMultiplication of matrix A and B\n\t\t");
        for(i=0;i<rowa;i++){    // rowa ...?  [1]
            for(j=0;j<colb;j++){  // colb...?  [2] 
            sum = 0;
                for(k=0;k<rowb;k++){// rowb...?  [3] 
                    sum = sum + a[i][k] * b[k][j];
                }
            c[i][j]=sum;
        }
    }
    printf("\nMatrix A*B is : \n\t\t");
    for(i=0;i<rowa;i++){
    for(j=0;j<colb;j++){
        printf("%d \t",c[i][j]);
      }
    printf("\n\t\t");
   }
   }
return 0;
}

  1. The number of row of the product matrix is equal to the row of the first(a) matrix
  2. The number of column of the product matrix is equal to the second(b) matrix
  3. The iteration number is equal to row of the second matrix (rowb) or the column of the first matrix (cola), since both are equal.

How to convert a while loop to a for loop in c

The basic structure of for loop is as following

for(initialization; condition; adjustment){
        statement(s);
      }

So the fo loop has four parts,

  1. Initialization: We need to assign a value for the control variable.
  2. condition: We have to use a conditional expression here. The compiler execute/iterate the for loop until it get 0 or false
  3. adjustment: Adjust the control variable (by increment or decrement ) so that the condition get 0 or false
  4. statement(s): Any type of simple or compound statement(s)

The basic structure of while loop is as following

while(condition){
        statement(s);
      }

We can see that the while loop has only two parts

  1. Condition
  2. statement(s)

So if we wish to use the while loop as the for loop we need to construct it as the following

initialization;
while( condition){
        statement(s);
      adjustment;
       }

Now lets see a program using both for loop and while loop. See the factorial finding program using both for loop and while loop

#include<stdio.h>
int main(void){

int count;

printf("Using for loop\n\n");
for(count = 1;count<=5; count++){
        printf(" \t count is %d\n",count);
        }


printf("\n Using for loop\n\n");
count = 1;
while(count<=5 ){
        printf("\t count is %d\n",count);
        count++;
        }

return 0;
}


Difference between while loop and if statement

The basic structure of while loop is as following

while(condition){
        statement;
      }

The basic structure of if statement is as following

if(condition){
        statement;
      }

So, seeing their structure, it seems that they are same. But no,,, they are not same. if the condition of if is true, the if statement will execute. Otherwise not. Once the condition is true it will execute and will iterate. Where as the while loop will iterate until it get a false or '0'

#include <stdio.h>
int main()
{
    char ch;
    printf("Press any key without N/n to continue the program\n");
    ch = getch();
    while((ch != 'N') && (ch != 'n')){
        printf("\a");
        ch = getch();
    }
    return 0;

}

The above program will not stop till you pressed N or n. As soon as you pressed the N or n the condition will false and the while stop iterating

#include <stdio.h>
int main()
{
    char ch;
    printf("Press n\n");
    ch = getch();
    if(ch == 'n'){
        printf("\a You pressed n\n");
        ch = getch();
    }
    printf("Then you pressed %c\n",ch);
    return 0;

}

To understand better, do as I state, After executing the program, press n, the condition will true, so the statement, You pressed n will show on display. Again press n, that means again the condition is true, but it will not iterate and execute the last statement Then you pressed ...


Factorial program in c using for loop, while loop and function.

Wikipedia define factorial as following

In mathematics, the factorial of a non-negative integer n, denoted by n!, is the product of all positive integers less than or equal to n.

Math is Fun gives the following definition

The factorial function (symbol: !) means to multiply a series of descending natural numbers.

Example
4! = 4 × 3 × 2 × 1 = 24
7! = 7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040
1! = 1 0! = 1, because the following reason.

We can rearrange one thing only one way, as 0 is also an entity so we can rearrange it in one way.
Also we can prove it mathematically with the help of Combination
Let us consider n is the number of different people, if we choose a team consisting with n people then we can only choose it one time, so

Now lets start coding using for loop

#include<stdio.h>
int main(){

    int n,i;
    float fact=1;
    printf("Enter your n\n");
    scanf("%d",&n);
    
    if(n <0 ) printf("\aPlease enter a positive number\n");
    else if((n == 1) || (n == 0)){
        printf("\aThe factorial is 1\n");
    }
   else{
            for(i=1;i<=n;i++){
            fact =fact*i;
            }
        printf("\aThe factorial is %.2f\n",fact);
       }

    return 0;
}

Using while loop

#include<stdio.h>

int main(){

    int n,i=1;
    float fact=1;
    printf("Enter your n\n");
    scanf("%d",&n);
    if(n <0 ) printf("\aPlease enter a positive number\n");
    else if((n == 1) || (n == 0)){
        printf("\aThe factorial is 1\n");
    }
   else{
           while(i<=n){
            fact =fact*i;
                i++;
            }
          printf("\aThe factorial is %.2f\n",fact);
       }

    return 0;
}

Using user defined function

#include<stdio.h>

float factorial( int n){
    if((n == 1) || (n == 0) ) return 1;
    else return n*factorial(n-1);
}

int main(){

    int n;
    printf("Enter your n\n");
    scanf("%d",&n);
    if(n <0 ) printf("\aPlease enter a positive number\n");
    else  printf("\aThe factorial is %.2f\n",factorial(n));

    return 0;
}