如何用C语言求质因数以及将它们从小到大相乘输出

img


完全不会啊,首先采用哪种循环不太清楚,也不知道怎么确定它为质因数


#include <stdio.h>

int main()
{
    int n, i;
    scanf("%d", &n);
    printf("%d=", n);
    for (i = 2; i <= n; i++)
    {
        while (n % i == 0)
        {
            printf("%d", i);
            n /= i;
            if (n != 1)
                printf("*");
        }
    }
    printf("\n");
    return 0;
}



程序的执行步骤如下:

首先从键盘读入一个整数n,表示待分解的数。
然后用循环从2到n依次枚举所有可能的质因数i。
对于每个质因数i,用while循环将n不断除以i,直到n无法再被i整除为止。
每次除完i之后,如果n不等于1,就输出一个乘号。
循环结束后,输出换行符。
这样,程序就能够输出n的所有质因数,并将它们从小到大相乘输出。

可以使用循环来不断利用质因数来整除输入的数,如果可以整除打印乘号和质因数,不可以整除则质因数+1,循环结束即可打印出质因数相乘的式子,打印式子可以先打印起始的1。

代码如下:



#include <stdio.h>

int main(void){
    
    int num;
    scanf("%d",&num); // 获取输需要分解的正整数 
    
    printf("1");  // 打印式子开头的1 
    
    int factor=2;  //  质因数成2开始 
    
    while(num!=1){
        
    //    printf("\nnum=%d,facotr=%d\n",num,factor);
        if(num%factor==0){  // 如果当前质因数可以整除 num,则打印乘号和质因数 
        
            if(num!=1){  // 如果num没有被分解完,则打印一个乘号 
                printf("*");
            }
            printf("%d",factor);  // 打印其质因数 
            num=num/factor;  // num除去质因数             
            
        }else{  // 如果不可以整除,则质因数+1 
            factor++;
        }
            
    
    }
    
    return 0;
}


img

供参考:

#include <stdio.h>
int main()
{
    int n, i=2, k=0;
    scanf("%d", &n);
    while (n != 1)
    {
          if (n % i == 0)
          {
              if(k == 0) printf("1*");
              printf(k++ == 0 ? "%d" : "*%d",i);
              n /= i;
          }
          else {
              i++;
          }
    }
    return 0;
}