一个关于c语言分解质因数的问题

img

img


代码如图,有一个困惑,如果i是n的质因数,那循环加到4,4不是质因数啊,需不需要另外写个循环列出质数表

不会,因为for循环里的while循环,会将n里面的因数4,在循环到4之前分解成2*2的形式,这里面涉及到了一些数学知识。

测试如下:

参考链接:


https://baike.baidu.com/item/%E5%9B%A0%E6%95%B0%E5%88%86%E8%A7%A3/5827933?fr=aladdin



#include <stdio.h>

int main(void){
    
    int n,i;
    printf("\nplease input a number:\n");
    scanf("%d",&n);
    printf("%d=",n);
// https://baike.baidu.com/item/%E5%88%86%E8%A7%A3%E8%B4%A8%E5%9B%A0%E6%95%B0/2253749?fromtitle=%E8%B4%A8%E5%9B%A0%E6%95%B0%E5%88%86%E8%A7%A3&fromid=10305400&fr=aladdin 
// https://baike.baidu.com/item/%E5%9B%A0%E6%95%B0%E5%88%86%E8%A7%A3/5827933?fr=aladdin
    for(i=2;i<=n;i++){ //2开始分解n的因数,直到 分解到因数大于n 
    
    // 如果n不等于i,就一直分解,这个起到循环的作用 ,可以将n中的因数i 分解到只剩最后一个,即当n==i时 
        while(n!=i){  
            
            if(n%i==0){  // 如果i整除n的余数等于0,i是n的因数,打印i的值,然后n中除掉i的值 
                printf("%d*",i);
                n=n/i;
            }else{  //  如果i整除n的值不等于0,则i不是n的因数,退出循环,判断判断i的下一个值是否n的因数 
                break;
            }
        }
        
    }
    
    printf("%d",n); // 打印n被分解到只剩最后一个因数的值 
    
    return 0;
    
} 

img