re求助
查看原帖
re求助
559590
Coverain楼主2024/3/19 21:23
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+2; 
bool isp[N];
vector<int> prime;
void gen_prime(long long n){
	memset(isp,true,sizeof(isp));
	
	for(long long  i=2;i<=n;++i){
		if(isp[i]) prime.push_back(i);
		for(int p:prime){
			if(p*i>n) break;
			isp[p*i]=false;
			if(i%p==0) break;
		}
	}
}
bool isprime(int x){
	if(x<2) return false;
	for(int i=2;i*i<=x;i++){
		if(x%i==0) return false;
	}
	return true;
}
int main()
{
	int n;
	gen_prime(1e6+1);
	cin>>n;
	
	while(n--){
		long long t;
		cin>>t;
		if(isprime(t)){
			cout<<t<<endl;
			continue;
		}
		if(t==1){
			cout<<1<<endl;
			continue;
		}
		if(t==2){
			cout<<2<<endl;
			continue;
		}
		for(int i=0;i<=N;i++){
			//cout<<endl<<t<<" "<<prime[i]<<endl;
			//cout<<114514;
			if(prime[i]>t) {
				//cout<<1919810;
				break;
			}
			if(t%prime[i]==0){
				cout<<prime[i]<<" ";
				t/=prime[i];
				i=-1;
			}
			
		}
		cout<<endl;
	}
	return 0;
}

2024/3/19 21:23
加载中...