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.runoob.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
C 语言经典100例
lky
178***22106@163.com
参考:
#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; }lky
178***22106@163.com
学工
121***1688@qq.com
参考方法:
#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); }学工
121***1688@qq.com
HIT_CCC
117***2963@qq.com
参考方法:
#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; }HIT_CCC
117***2963@qq.com
ronnyz
221***8677@qq.com
参考方法:
#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; }ronnyz
221***8677@qq.com
Agan
979***285@qq.com
参考方法:
#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) { } }Agan
979***285@qq.com
huanhuan
992***291@qq.com
参考方法(递归法):
#include<stdio.h> #include<stdlib.h> #include<math.h> int digui(int x) { int i,n=1;//n为质数的判断值,若n为1则x为质数,n为0则为x为合数 if(x>3)//x小于等于3为素数,直接到printf("%d",x)这一行,否则运行以下内容 for(i=2;i<=sqrt(1.0*x);i++)//判断x是否为素数,让i从2到sqrt(x)的整数与x分别作除 if(x%i==0)//若x能被i整除 { n=0;//则让n为0 break;//并打破for循环,此时记录的i为x的一个因数,另一个因数为x/i } if(n)//判断n的值,若n为真,即n=1,则输出质数x的值 printf("%d",x); else//否则,即n=0 { digui(i);//则对因数i递归调用函数本身 printf("*");//输出一个* digui(x/i);//再对因数x/i递归调用函数本身 } } void main() { int n; printf("请输入数字:"); scanf("%d",&n); printf("质因数分解如下:\n"); digui(n); putchar('\n'); //system("pause"); }huanhuan
992***291@qq.com