10 分解质因数
作者: Turbo时间限制: 1S章节: 基本练习(循环)
问题描述 :
求出区间[a,b]中所有整数的质因数分解。
输入说明 :
输入两个整数a,b。
2<=a<=b<=10000
输出说明 :
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看范例)
输入范例 :
3 10
输出范例 :
3=3
4=22
5=5
6=23
7=7
8=222
9=33
10=25
#include <stdio.h>
#include <math.h>
int prenumber(int s){
int i;
for(i=2;i<=sqrt(s);i++){
if(s%i==0)
break;
}
if(i>sqrt(s))
return 1;
return 0;
}
int main(){
int a,b;
scanf("%d%d",&a,&b);
int i;
int j;
for(i=a;i<=b;i++){
if(prenumber(i))//i本身是质数
{printf("%d=%d\n",i,i);
continue;
}
printf("%d=",i);//输出格式
int t=i;
while(t){
for(j=2;j<=t;j++){
if(t%j==0&&(prenumber(j)))
{
if(t!=j)
printf("%d*",j);
else printf("%d\n",j);
break;
}
}
t=t/j;
}
}
return 0;
}
第二种代码:稍微优化了点
解决方案:
1.每一个大于2的非素数都可以表示成素数乘积的形式,
2.通过遍历,进行取模(看是否为0),是的话,就输出,不是的话。接着遍历
3.若他本身是素数,那更容易输出了
#include <stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
int i,j;
for(i=a;i<=b;i++){
printf("%d=",i);
int temp=i;
j=2;
while(temp){
if(temp%j==0)//肯定是素数
{ if(j!=temp)
printf("%d*",j);
else {printf("%d\n",j);
break;
}
temp=temp/j;
j=2;
}
else j++;
}
}
return 0;
}