1825: 分解质因数
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 10 Solved: 7
[ Submit][ Status][ Web Board]
Description
求出区间[a,b]中所有整数的质因数分解。
Input
输入两个整数a,b。
Output
每行输出一个数的分解,形如k=a1*a2*a3...(a1< =a2< =a3...,k也是从小到大的)(具体可看样例)
Sample Input
3 10
Sample Output
3=3
4=2*2
5=5
6=2*3
7
=7
8=2*2*2
9=3*3
10=2*5
HINT
先筛出所有素数,然后再分解。 数据规模和约定 2< =a< =b< =10000
【解析】
这道题就是如果在这个区间内的数能拆分能素数相乘就输出表达式,2是素数,所以如果能被该数能被2整除的话也就算一个因数。
#include <iostream>
#include <string>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int facs(int n)
{
int i;
if(n%2==0)//如果能被2整除的话就返回2
return 2;
for(i=3;i<=sqrt(n);i++)
{
if(n%i==0)//看能不能被其它素数整除
return i;
}
return n;//不能的话返回该数
}
int main()
{
int n,m,i,k,p;
scanf("%d%d",&n,&m);
for(i=n;i<=m;i++)
{
k=facs(i);
p=i/k;//p就是指消除了1个因数剩下的数
printf("%d=%d",i,k);
while(p>1)
{
k=facs(p);
p=p/k;
printf("*%d",k);
}
printf("\n");
}
return 0;
}