关于C语言中分解质因数的源代码
题目要求:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。以下是网上找的源代码。main(){intn,i;printf("\npleaseinput...
题目要求:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
以下是网上找的源代码。
main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{ printf("%d*",i);
n=n/i;
}
else
break;
}
}
printf("%d",n);}
有三个疑问。
1,在循环开始处的条件i<=n中,n的值是会改变的吗?因为在下面的代码中n的值会改变,n=n/i
2,为什么在循环内部的判断条件是n!=i?
3,为什么最后要输出n的值?
谢了。 展开
以下是网上找的源代码。
main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{ printf("%d*",i);
n=n/i;
}
else
break;
}
}
printf("%d",n);}
有三个疑问。
1,在循环开始处的条件i<=n中,n的值是会改变的吗?因为在下面的代码中n的值会改变,n=n/i
2,为什么在循环内部的判断条件是n!=i?
3,为什么最后要输出n的值?
谢了。 展开
展开全部
1、n的值是会改变的。在这边这样理解:
i从2开始。如果能整数比如说2.那么此时n/2. 然后再去带到while判断。如果i<=n(此时n=n(原来的n)/2).然后能被2整除的话,继续循环。直到没有2这个质因素。接着往3走。
2.因为边除,i的值会越来越大。而n的值会越来越小。参考1里分析的。当n=i的时候。也就是本身。同时也就是原来n的最大质因素。所以这个判断条件是对的。
3、参考2.因为n是原来n的最大质因素。所以最后还必需输入n
也举个简单例子.
n=20.
输入n=20.
i=2 n%i==0.所以n=20/2=10,i++.但是n的值发现变化。
所以需要重新赋值for(i=2;i<=n=10;i++)
i=2时n%i==0.所以n=10/2=5,i++
下面的同理
i=3时n%i!=0 ,i++
i=4时n%i!=0,i++
i=5时n=i.
所以20=2*2*5
i从2开始。如果能整数比如说2.那么此时n/2. 然后再去带到while判断。如果i<=n(此时n=n(原来的n)/2).然后能被2整除的话,继续循环。直到没有2这个质因素。接着往3走。
2.因为边除,i的值会越来越大。而n的值会越来越小。参考1里分析的。当n=i的时候。也就是本身。同时也就是原来n的最大质因素。所以这个判断条件是对的。
3、参考2.因为n是原来n的最大质因素。所以最后还必需输入n
也举个简单例子.
n=20.
输入n=20.
i=2 n%i==0.所以n=20/2=10,i++.但是n的值发现变化。
所以需要重新赋值for(i=2;i<=n=10;i++)
i=2时n%i==0.所以n=10/2=5,i++
下面的同理
i=3时n%i!=0 ,i++
i=4时n%i!=0,i++
i=5时n=i.
所以20=2*2*5
展开全部
以90为例
这个程序的大概思路是从2开始到90为止一个数一个数的实验,看是否是90的因子。
while循环的作用是看是否有重复因子,如:
90=2×3×3×5,当实验到3时,发现除一次不够,就在除一次3.
针对你的问题:
1.n会改变的。因为你找因子的过程中找到一个就要除掉它再找。如:90首先找到了2,就除以2,给45再找。
2&3.n!=i;n不等于i;我举个n=9的例子。首先找到3合适,由于9!=3,进入while循环,9/3=3,输出3*;n变成了3,3=3,所以跳出循环,由程序最后一句printf语句输出此时的n.最终输出9=3*3.
这个程序的大概思路是从2开始到90为止一个数一个数的实验,看是否是90的因子。
while循环的作用是看是否有重复因子,如:
90=2×3×3×5,当实验到3时,发现除一次不够,就在除一次3.
针对你的问题:
1.n会改变的。因为你找因子的过程中找到一个就要除掉它再找。如:90首先找到了2,就除以2,给45再找。
2&3.n!=i;n不等于i;我举个n=9的例子。首先找到3合适,由于9!=3,进入while循环,9/3=3,输出3*;n变成了3,3=3,所以跳出循环,由程序最后一句printf语句输出此时的n.最终输出9=3*3.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、n的值是会改变的。在这边这样理解:
i从2开始。如果能整数比如说2.那么此时n/2.
然后再去带到while判断。如果i<=n(此时n=n(原来的n)/2).然后能被2整除的话,继续循环。直到没有2这个质因素。接着往3走。
2.因为边除,i的值会越来越大。而n的值会越来越小。参考1里分析的。当n=i的时候。也就是本身。同时也就是原来n的最大质因素。所以这个判断条件是对的。
3、参考2.因为n是原来n的最大质因素。所以最后还必需输入n
也举个简单例子.
n=20.
输入n=20.
i=2
n%i==0.所以n=20/2=10,i++.但是n的值发现变化。
所以需要重新赋值for(i=2;i<=n=10;i++)
i=2时n%i==0.所以n=10/2=5,i++
下面的同理
i=3时n%i!=0
,i++
i=4时n%i!=0,i++
i=5时n=i.
所以20=2*2*5
i从2开始。如果能整数比如说2.那么此时n/2.
然后再去带到while判断。如果i<=n(此时n=n(原来的n)/2).然后能被2整除的话,继续循环。直到没有2这个质因素。接着往3走。
2.因为边除,i的值会越来越大。而n的值会越来越小。参考1里分析的。当n=i的时候。也就是本身。同时也就是原来n的最大质因素。所以这个判断条件是对的。
3、参考2.因为n是原来n的最大质因素。所以最后还必需输入n
也举个简单例子.
n=20.
输入n=20.
i=2
n%i==0.所以n=20/2=10,i++.但是n的值发现变化。
所以需要重新赋值for(i=2;i<=n=10;i++)
i=2时n%i==0.所以n=10/2=5,i++
下面的同理
i=3时n%i!=0
,i++
i=4时n%i!=0,i++
i=5时n=i.
所以20=2*2*5
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、n的值是会改变的。在这边这样理解:
i从2开始。如果能整数比如说2.那么此时n/2.
然后再去带到while判断。如果i<=n(此时n=n(原来的n)/2).然后能被2整除的话,继续循环。直到没有2这个质因素。接着往3走。
2.因为边除,i的值会越来越大。而n的值会越来越小。参考1里分析的。当n=i的时候。也就是本身。同时也就是原来n的最大质因素。所以这个判断条件是对的。
3、参考2.因为n是原来n的最大质因素。所以最后还必需输入n
也举个简单例子.
n=20.
输入n=20.
i=2
n%i==0.所以n=20/2=10,i++.但是n的值发现变化。
所以需要重新赋值for(i=2;i<=n=10;i++)
i=2时n%i==0.所以n=10/2=5,i++
下面的同理
i=3时n%i!=0
,i++
i=4时n%i!=0,i++
i=5时n=i.
所以20=2*2*5
i从2开始。如果能整数比如说2.那么此时n/2.
然后再去带到while判断。如果i<=n(此时n=n(原来的n)/2).然后能被2整除的话,继续循环。直到没有2这个质因素。接着往3走。
2.因为边除,i的值会越来越大。而n的值会越来越小。参考1里分析的。当n=i的时候。也就是本身。同时也就是原来n的最大质因素。所以这个判断条件是对的。
3、参考2.因为n是原来n的最大质因素。所以最后还必需输入n
也举个简单例子.
n=20.
输入n=20.
i=2
n%i==0.所以n=20/2=10,i++.但是n的值发现变化。
所以需要重新赋值for(i=2;i<=n=10;i++)
i=2时n%i==0.所以n=10/2=5,i++
下面的同理
i=3时n%i!=0
,i++
i=4时n%i!=0,i++
i=5时n=i.
所以20=2*2*5
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
n 当然会改变了 n=n/i;
如果n的值等于i的值的话,那就是n=2;
最后输出的n已经不是开始用户输入的值了 是n=n/i; 是最后一个质因数
if(n%i==0)
{ printf("%d*",i);
n=n/i;
}
这样的话到最后n=最后一个分解出来的质因数的时候就执行else了 而不再打印出来
没有最后那个输出n的话 显示的结果将是n=i*j*后面最后一个质因数是不显示的
如果n的值等于i的值的话,那就是n=2;
最后输出的n已经不是开始用户输入的值了 是n=n/i; 是最后一个质因数
if(n%i==0)
{ printf("%d*",i);
n=n/i;
}
这样的话到最后n=最后一个分解出来的质因数的时候就执行else了 而不再打印出来
没有最后那个输出n的话 显示的结果将是n=i*j*后面最后一个质因数是不显示的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询