资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1a2a3…(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
参考代码及详细说明
/*
求出区间[a,b]中所有整数的质因数分解
解题思路:
1、循环遍历所有的数
2、如果是素数,直接输出出来
3、如果不是素数,就使用短除法,从最小的素数2开始短除
*/
#include<stdio.h>
int isPrime(int n);
int main()
{
int num1, num2;
int i,j;
scanf("%d%d", &num1, &num2);
for ( i=num1; i<=num2; i++ ){
if( isPrime(i) ){ // 如果是素数直接打印
printf("%d=%d\n", i, i);
} else { // 如果不是素数则用短除法
printf("%d=", i);
j = 2;
int k = i; // 这里不能直接操作i,需要既借助一个中间变量
while( k>2 ){
// 如果可以被素数整除,且除完不为素数
// 这里我们注意:
// 1、从最小的素数开始短除,该数可能会被多次整除
// 2、用循环将该数除尽
while( k%j == 0 && isPrime(k/j) == 0 ){
printf("%d*", j);
k = k/j;
}
// 最后一次除完结果是素数,结束
if ( k%j == 0 && isPrime(k/j) ){
printf("%d*%d", j, k/j);
break;
}
j++;
}
printf("\n");
}
}
return 0;
}
// 判断是否是素数的函数
int isPrime(int n){
int i;
int result = 1;
if( n<2 ){
result = 0;
}
for( i=2; i<n; i++ ){
if( n%i == 0 ){
result = 0;
break;
}
}
return result;
}