码迷,mamicode.com
首页 > 编程语言 > 详细

C语言之基本算法35—分解质因数(方法二)

时间:2015-07-13 06:39:07      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:c语言   质因数   

//矩阵基础
/*
==================================================================

题目:输入一个正整数,将其分解为质因式,如:60=2*2*3*5;若本身是质数,则输出

如:307是一个质数!

==================================================================
*/
#include<stdio.h>
int sushu(int n)
{
int i,k;
k=n/2;//控制结束位置!
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>k) return 1;
else return 0;
}
void main()
{
int m,n,i,c,y[100];
printf("输入要分解的数:");
scanf("%d",&n);
while(n>0)
{
m=n;
c=0;
if(sushu(m))
printf("%d 是一个素数\n",m);
else
{
for(i=2;i<=m;i++)
{
while(m%i==0)//初学者可能会在这里写成if!想想为什么不能写成if?
{
m/=i;
y[c++]=i;
}
}
printf("%d=%d",n,y[0]);
for(i=1;i<c;i++)
printf("*%d",y[i]);
printf(".");
}
printf("\n继续输入:");
scanf("%d",&n);
}
}
/*
======================================================================
评:

这是一道有深度的题目,思路是这样的:先定义素数的判断函数,输入一个数,判断,如果是

质数,直接输入如 307是一个质数!否则继续下一步:在0到m之间(注意m是动态的)寻找因

子,首先找到的i必然是质数,比如不可能先找到4,因为在4之前还有2,必然先找到2,而2是

质数!确定质因子i后,将m变为m/i,比如60,先找到质因子2,然后变为60/2=30,通过循环(

此时i的初值又变回2)继续找30的质因子,直到找不出质因子(60找2变30,再找2变15,再找

3变5,5已经找不出质因子,因为5已经是质数),此时循环结束!为了按照题目要求输出,必须

将找到的质因子保存在预先定义的数组y[]中,以便循环结束时按要求输出!你想想如果不用数组

输出,是不是没法输入“*”或者多输出“*”!的确是这样的,读者可以不通过数组尝试输出结果,以

便理解上面这几句!

========================================================================
*/

版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言之基本算法35—分解质因数(方法二)

标签:c语言   质因数   

原文地址:http://blog.csdn.net/lzx19901012/article/details/46855655

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!