问题 D: 分解质因数

问题 D: 分解质因数

时间限制: 1 Sec   内存限制: 128 MB
提交: 17   解决: 8
[ 提交][ 状态][ 讨论版]

题目描述



   基础练习  分解质因数   

时间限制:1.0s     内存限制:512.0MB

     

问题描述

  求出区间[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





输入

输出




#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int prime[10002],m=0;
bool s[10002]={0};
void find_prime()
{
	for(int i=2;i<10002;i++)
	{
		if(s[i]==false)
		{
			prime[m++]=i;
			for(int j=i+i;j<10002;j+=i)
			{
				s[j]=true; 
			} 
		}
	}
}//素数筛选法 
int main()
{
	find_prime();
	int n,h,k,g;
	cin>>n>>h;
	if(n>h) 
	{g=n;
		n=h;
		h=n;
	}//大小交换,确保一下遍历 
	for(int i=n;i<=h;i++)
	{k=i;//用k替代方便循环查找因数 
	 cout<<i<<"=";
		while(1)
		{
		   if(s[k]==false)//利用了全局变量 
		   {
		   	cout<<k;
		   	break;//当为素数时,说明其被分解成了最后一个素数跳出 
			} 
			else//否则在prime数组里从小去找素数因子 
			{
				for(int j=0;j<m;j++)
				{
					if(k%(prime[j])==0)
					{
						cout<<prime[j]<<'*';
						k=k/prime[j];//找到素数因子后,判断对其的另一个因子赋给k再用循环 
						break;
					}
				}
			}
	    } 
	    cout<<"\n";
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值