刷题——蓝桥杯 BASIC-16 分解质因数

问题描述:

求出区间[a,b]中所有整数的质因数分解。

输入格式:

输入两个整数a,b。

输出格式:

每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)

数据规模与约定:

2<=a<=b<=10000

编程实现:

(思路来自:https://blog.csdn.net/qq_41785863/article/details/83994405)(该博客包含有关素数筛查的内容)

#include
#include
#include
#include
using namespace std;

const int N = 10005;
int a[N];

//1.找出区间素数(关于素数的筛查有许多值得注意的方法,再这里标记一下)
//2.质因数分解 
int main() {
	//筛出所有素数,然后再分解
	memset(a,0,sizeof(a));//将输入数组清零 
	a[0]=1,a[1]=1;// 0和1标记为非素数 
	for(int i=2;i<N;++i) //遍历数组 
	{
		if(!a[i])//素数筛查,将非素数的数标记为1,素数标记为0 
			for(int j=i*2;j<N;j+=i)
				a[j]=1;
	}
	int x,y;
	scanf("%d%d",&x,&y);//输入区间 
	for(int i=x;i<=y;++i)//遍历区间中的每一个数 
	{
		int temp=i;
		bool flag=false;
		printf("%d=",i);
		while(temp!=1)
		{
			for(int j=2;j<=temp;++j)//从2开始遍历 
			{
				if(temp%j == 0 && !a[j])//找到质因数 
				{
					temp /= j;//分解 
					if(flag)//通过flag控制是否输出乘号 
						printf("*");
					printf("%d",j);
					flag=true;
					break;
				}
			}
		}
		printf("\n");
	}
	return 0;
}

解析:见注释

你可能感兴趣的:(刷题(C/C++))