问题描述
求出区间[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
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 }