BASIC-16 VIP试题 分解质因数

  • 欧拉筛法先筛选质数,再进行质因数分解
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> P;
const int N=1e4+9;
const int M=2e5+9;
#define gt getchar();
#define line '\n'
#define is isdigit
int read(){int x=0,op=1;char c=gt;while(!is(c)){if(c=='-')op=-1;c=gt;}while(is(c))x=x*10+c-48,c=gt;return x*op;}
int vis[N],su[N],num;
void init()
{
	for(int i=2;i<N;++i){
		if(!vis[i])su[++num]=i;
		for(int j=1;j<=num&&i*su[j]<N;++j){
			vis[i*su[j]]=1;
			if(i%su[j]==0)break;
		}
	}
	//for(int i=1;i<=100;++i)cout<<su[i]<<" ";
}
void cal(int n)
{	
	cout<<n<<"=";
	vector<int> V;
	for(int i=1;su[i]<=n;++i){
		if(n%su[i]==0){
			while(n%su[i]==0)V.push_back(su[i]),n/=su[i];
		}
	}
	cout<<V[0]; 
	for(int i=1;i<V.size();++i)cout<<"*"<<V[i];
	cout<<line;
} 
int main()
{
	init();
	int L=read(),R=read();
	for(int i=L;i<=R;++i)cal(i);
	return 0;
}
posted @ 2020-04-15 21:25  啥也不是*  阅读(123)  评论(0)    收藏  举报