while(k <= n) {
if(k == n) {System.out.println(n);break;}
else if( n % k == 0) {System.out.print(k + "*");n = n / k; }
else k++;
请问这是如何断定最后一个质因数就是递增后的k呢,谢谢了!
将一个正整数分解质因数,请问这是用的什么思维逻辑,万分感谢!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- Valtava 2016-07-07 05:39关注
显然这段代码有个约束条件,就是
输入的n应该是可以做因式分解的
,否则这段代码无法保证正确性。假设k从2开始递增,每次k不能整除n的时候递增k,当k可以整除n的时候说明k是n的因数,而且是质因数(因为如果k是合数的话,前面就已经判断并输出了,举个例子,如果k=6,那么k肯定无法整除现在的n,因为不可能有个数是6的倍数但不是2和3的倍数。前面当k=2和k=3的时候已经判断过了),这种循环保证了当k递增时,任何比k小的数(包括递增之前的k)都无法整除n了。
每次当k可以整除n的时候,输出k,并且n = n/k,从而使得新的n完成一步因数分解。
现在楼主再参考一下第一行说的约束条件,既然n是可以做因式分解的,任何比k小的数(包括k)都无法再整除n,那么递增(可能递增了不止一次)之后的k就是n最大的质因数。举个例子,n=140
1. 循环开始,k=2, 此时不满足k==n但是满足因数条件(140%2==0)输出“2 ×” , n赋值为70 (n = n/k),进入下一次循环
2. 此时k=2, 此时不满足k==n但是满足因数条件(70%2==0),输出“2×”, n赋值为35
3. 接下来的循环里,k不再满足k==n或是因数条件(35%2 !=0 ),因此递增,直到k=5
4. 当k=5时,再次满足因数条件(35%5==0),输出“5×”,n被赋值为7
5. 下次循环开始时,k=5,不满足k==n或者因数条件,递增,直到k=7
5. 此时k=7,满足循环结束条件k=n, 输出7,循环结束。
因此总的输出是 2x2x5x7本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 聚类分析或者python进行数据分析
- ¥15 逻辑谓词和消解原理的运用
- ¥15 三菱伺服电机按启动按钮有使能但不动作
- ¥15 js,页面2返回页面1时定位进入的设备
- ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
- ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号