Prime Factorisation + prime number in C

#include <stdio.h>

void factor(int num);

int main(void){
    int num;

    printf("Enter positive number(more than 1): ");
    if(1 != scanf("%d", &num) || num < 2){
        printf("invalid input!\n");
        return -1;
    }
    scanf("%*[^\n]");scanf("%*c");//clear upto line end

    factor(num);

    printf("Press any key to exit...");
    getchar();
    return 0;
}

void factor(int num){
    int i, flag = 0;

    if(num == 2){
        printf("\n%d is a prime number\n", num);
        return ;
    }
    while(!(num & 1)){
        if(!flag)
            printf("\n%d is not a prime number\n", num);
        flag = 1;
        printf("2 x ");
        num >>= 1;
    }
    for (i = 3; i*i <= num; i += 2){
        while(num % i == 0){
            if(!flag)
                printf("\n%d is not a prime number\n", num);
            flag = 1;
            printf("%d x ", i);
            num /= i;
        }
    }
    if(!flag)
        printf("\n%d is a prime number\n", num);
    else if(num != 1)
        printf("%d x 1\n\n", num);
    else
        printf("1\n\n");
}

Leave a Comment