首页 > 代码库 > C语言之基本算法34—分解质因数(方法一)
C语言之基本算法34—分解质因数(方法一)
//矩阵基础 /* ================================================================== 题目:输入一个正整数。将其分解为质因式,如:60=2*2*3*5;若本身是质数,则输出 如:307是一个质数!================================================================== */ #include<stdio.h> void main() { int n,m,c,i,k,y[40]; printf("输入一个正整数:"); scanf("%d",&n); while(n>0) { m=n; c=0; k=m/2; for(i=2;i<=k;i++) { while(m%i==0) { y[c++]=i; m/=i; } } if(m>1) y[c++]=m; if(c==1) printf("%d 是一个质数\n",n); else { printf("%d=%d",n,y[0]); for(i=1;i<c;i++) printf("*%d",y[i]); printf("."); } printf("\n\n继续输入一个正整数:"); scanf("%d",&n); } } /* ==================================================================== 评: 这个编法可能比較抽象!比較难理解的地方是m>1,c==1,m%i==0;m>1,则m至少为2,说明 至少有一个质因数(由于2,3,都是质数),所以储存质因子的数组y[]至少含一个元素。即c>=1; 若c==1,则y[]恰好有一个元素,必然是这个数它本身!
所以这个数就是素数!m%i==0,说明m 能够被i整除,即i是m的因子,由于是从2開始的。所以必然为质数(读者若不明确,能够在温 习一下质数的性质。);m/i,是将m分解为一个数shu乘以质因数,然后通过for和while循环继续 寻找shu的质因数!
直到找不到则循环结束,然后按格式输出就好! ===================================================================== */
C语言之基本算法34—分解质因数(方法一)