蓝桥杯基础练习-分解质因数
问题描述
求出区间[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
------------------------------------------------------------------------------------------------------------------------------
解题思路:任何非素数都能用素数乘积来表示,所以对非素数n进行从2到n进行求余得出第一个因数然后与sum相乘并保存sum中,(i=1就是重新从2循环)继续此操作直到sum和n相同。用数组来存放n的因数,。
--------------------------------------------------------------------------------------------------------------------------------
#include<stdio.h>
int fun(int n){ //判断是否为素数;是就输出,不是返回1;
int i,temp;
int ans=0;
temp=n;
for(i=2;i<=n/2;i++)
if(n%i==0)
ans=1;
if(ans==0)
printf("%d=%d\n",temp,temp);
return ans;
}
void fun1(int n){ //非素数的因数分解;
int num[100];int i,j,temp;
int k=0,ans=1,sum=1;
temp=n;
for(i=2;i<=n;i++){ //多次循环中找出因数为是素数的数。
if(n%i==0){
num[k]=i;
sum*=i;
n=temp/sum;
if(n==1)
break;
i=1; //i=1,代表新一轮的循环从2开始。
k++;
}
}
printf("%d=",temp);
for(i=0;i<=k;i++){
printf("%d",num[i]);
if(i<k) printf("*");
}
printf("\n");
}
int main(){
int a,b,i;
scanf("%d %d",&a,&b);
for(i=a;i<=b;i++)
if(fun(i))
fun1(i);
return 0;
}