C 练习实例14 - 将一个正整数分解质因数
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
- (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。
- (2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。
- (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
实例
// Created by www.facesoho.com on 15/11/9.
// Copyright © 2015年 小鸟启蒙. All rights reserved.
//
#include<stdio.h>
int main()
{
int n,i;
printf("请输入整数:");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n%i==0)
{
printf("%d",i);
n/=i;
if(n!=1) printf("*");
}
}
printf("\n");
return 0;
}
以上实例输出结果为:
请输入整数:90 90=2*3*3*5

文人墨客
参考方法:
#include<stdio.h> #include <math.h> int main() { int i = 2, m, sq; printf("请输入整数:"); scanf("%d", &m); sq = sqrt(m); //这个可以参考下质数的筛选方式 while (i <= sq) { if (m % i == 0) { printf("%d", i); m /= i; if (m != 1) printf("*"); } else i++; } if (m != 1) printf("%d", m); while (getchar() != EOF) { } }文人墨客
参考方法:
#include <stdio.h> int main(){ int n,i; scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++){ //分解质因数,可以用i++是因为被2整除过后一定不能再被4整除 while(n%i==0){ printf("%d",i); n/=i; if(n!=1) printf("*"); } } printf("\n"); return 0; }文人墨客
参考方法:
#include<stdio.h> int main(void) { int n,count = 1,num,i = 2; printf("请输入整数:"); scanf("%d",&n); num = n; while(i < num) { if(n%i == 0) { if(count == 1) printf("%d=%d",n,i); else printf("*%d",i); count++; n = n/i; } else i++; } return 0; }文人墨客
参考方法:
#include <stdio.h> int main() { int x, n; printf("请输入一个正整数\n"); scanf("%d",&x); printf("%d=",x); for(n=2;n<x;n++) { if(x%n==0){ printf("%d*",n); x=x/n; n=1; } } printf("%d\n",x); }文人墨客
参考:
#include <stdlib.h> #include <string.h> #include <stdio.h> #include<math.h> void Positive_integer_disintegrant(int n) { int i = 2, m; m = n; printf("%d = ", n); while (i <=(n/2)) { if (m%i == 0) { printf("%d", i); m = m / i; if (m != 1) { printf(" * "); } } if (m%i != 0) { i++; } } } int main(void) { int n; printf("正整数分解质因数\n"); scanf("%d", &n); Positive_integer_disintegrant(n); //system("pause"); return 0; }