基础练习 分解质因数

问题描述
  求出区间[a,b]中所有整数的质因数分解。
输入格式
  输入两个整数a,b。
输出格式
  每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
  先筛出所有素数,然后再分解。
数据规模和约定
  2<=a<=b<=10000
 
没啥好说的,遍历就行,遇到质因数输出。
 1 #include<stdio.h>
 2 #include<stdbool.h>
 3 #include<math.h>
 4 
 5 bool isPrimeNum(int n)
 6 {
 7     int i;
 8     int flag = 0;
 9 
10     for (i = 2; i <= sqrt(n); i++)
11     {
12         if (n % i == 0)
13         {
14             flag = 1;
15         }
16     }
17 
18     if (flag == 0)  //flag == 0 so this num is a Prime Num
19     {
20         return true;
21     }
22     else
23     {
24         return false;
25     }
26 }
27 
28 int main()
29 {
30     int a, b;
31     int i, j;
32 
33     scanf("%d %d", &a, &b);
34     for (i = a; i <= b; i++)
35     {
36         int flag2 = 0;
37         int tem = i;
38         if (isPrimeNum(i)) //if it is a prime number
39         {
40             printf("%d=%d
", i,i);
41         }
42         else
43         {
44             printf("%d=", i);
45             for (j = 2; j < i; j++)
46             {
47                 if (tem % j == 0)  //如果遇到质因数才会输出,即让flag2 = 1;
48                 {
49                     tem /= j;
50                     j--;
51                     flag2 = 1;
52                 }
53 
54                 if (tem-1 == 0 && flag2 == 1) //如果tem=1了就说明到了最后就不用输出*
55                 {
56                     printf("%d", j+1);
57                 }
58                 else if(tem-1 != 0 && flag2 == 1)
59                 {
60                     printf("%d*",j+1);
61                 }
62                 //j--;
63                 if (tem-1 == 0)
64                 {
65                     break;
66                 }
67 
68                 flag2 = 0;
69             }
70             printf("
");
71         }
72     }
73     return 0;
74 }
原文地址:https://www.cnblogs.com/ZhengLijie/p/12689968.html