<蓝桥杯> <基础练习>分解质因数(简单题)

分解质因数

资源限制
时间限制: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

提示
  先筛出所有素数,然后再分解。
数据规模和约定
  2<=a<=b<=10000

题解:分解数n时,因子i从2开始,当n将i整除时,n就变为一个新的值即n/2,i再从2开始,即没整除一次就会有一个新的n值。比如60,n刚开始为60,第一个因数2,然后n=30,再从2开始,n=15,i=3时,n=5,结束,所以60=2x2x3x5;

AC代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
int prim(int n)
{
    
    
	int i,f=0;
	for(i=2; i*i<=n; i++)
		if(n%i==0)
		{
    
    
			f=1;
			break;
		}
	if(f==0)
		return 1;
	else
		return 0;
}
int main()
{
    
    
	int a,b;
	int i,j;
	scanf("%d%d",&a,&b);
	for(i=a; i<=b; i++)
	{
    
    
		printf("%d=",i);
		int k=i;
		if(prim(k))
			printf("%d\n",k);
		else
		{
    
    
			int f=0;
			while(1)
			{
    
    
				int m;
				for(j=2; j<=k; j++)
				{
    
    
					if(k%j==0&&prim(j))
					{
    
    
						printf("%d*",j);
						m=k/j;
						if(prim(m))
						{
    
    
							f=1;
							printf("%d\n",m);
							break;
						}
						else
							break;
					}
				}
				if(f)
					break;
				else
					k=m;
			}
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zlzqq/article/details/114601859
今日推荐