Here's the question you clicked on:
eamier
i don't understand this in program to prime factorization.if(n%i==0) { n=n/i; printf("%d,",i); i--; }
this is the full code: #include<stdio.h> main() { int n,i; printf("Enter a Number:"); scanf("%d",&n); printf("\n\nPrime Factors of %d is: ",n); for(i=2;i<=n;i++) { if(n%i==0) { n=n/i; printf("%d,",i); //n=n/i; i--; } } }
i don't know why need i--
decreasing the counter it is used for i--
i still don’t understand. what the counter for.
if i put like this: printf("%d,i); n=n/i; i--; it still correct, why we need n=n/i;i--;. we already get the value of i.
sorry i m not conformed about it but check ur code above u used the increment counter in for loop nd below the decreasing counter.
the order of those instructions does not matter. It usually does, but not in this case. Also, I want to say that this program works poorly if it faces a large prime number. I recommend the following code: #include <stdio.h> int main(){ int n, i; scanf("%d", &n); printf("The prime factorization for %d is: ", n); for (i = 2 ; i * i <= n ; i++) while (n % i == 0){ n /= i; printf("%d ", i); } if (n != 1) printf("%d", n); return 0; }
if i skip [ n=n/i; i--; ] i will get all factor including not prime no. can you explain that part
and also this part n/ = i
The reason you do [n /= i] is because you want to remove the factors of i in n. Let me give you an example: n = 42 When you iterate: i = 2: you divide n by 2 => n = 21 i = 3: you divide n by 3 => n = 7 This way, when you reach 6, you will not take it as a prime factor, because you already divided by 2 and 3. This way, 6 does not divide n anymore i hope you understand my explanations
so this mean that the sequence of dividing is 2,3,5,7,11...
skip number that already got its factor before
it isn't skipping "consciously"; it divides by everything it can. To understand what's happening, put in a number like 60 and go through the code in your head. i=2.... then it checks... does 2 divide 60? (that's 60%2==0). Yes it does, so take 60/2, and 2-->1 (i--). Then the loop is done so 1-->2 (i++), and it checks again 30%2==0, so 30-->15, 2-->1. Then 1-->2 and we check again. This time 15%2 !=0, so 2-->3 and we check 15%3. etc.