将一个正整数分解成质因数,例如:输入90,打印输出 90=2*3*3*5
使用C语言实现:
#include<stdio.h>
int main(){
int n,i;
printf("请输入需要分解的正整数: ");
scanf("%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);
return 0;
}
测试结果:
测试正确!
另一种不用将i除到n,进行小改动:
- 优化循环:将
for
循环的迭代条件改为i * i <= n
,因为如果一个数n
有一个大于sqrt(n)
的因子,那么它必然有一个小于或等于sqrt(n)
的因子。这样可以减少不必要的迭代。 - 移除多余的
else break;
:原代码中的else break;
是多余的,因为while
循环的结束条件已经足够。 - 处理剩余的大于sqrt(n)的质数:如果
n
在循环结束后仍然大于1,说明它是一个质数且大于sqrt(n)
,直接打印出来。 - 添加换行符:为了输出格式的整洁,在打印完所有质因数后添加一个换行符。
#include<stdio.h>
int main(){
int n, i;
printf("请输入需要分解的正整数: ");
scanf("%d", &n);
for(i = 2; i * i <= n; i++){ // 只需迭代到sqrt(n)即可
while(n % i == 0){
printf("%d*", i);
n = n / i;
}
}
// 如果n此时大于1,说明n是一个大于sqrt(n)的质数
if(n > 1)
printf("%d", n);
// 如果需要,可以在最后打印一个换行符
printf("\n");
return 0;
}
觉得有帮助的话点个赞吧!