警示后人
  • 板块P9836 种树
  • 楼主sbno333
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/11 19:01
  • 上次更新2023/11/11 22:59:12
查看原帖
警示后人
416975
sbno333楼主2023/11/11 19:01

分解质因数一定要看好写了while!!!

11分:

#include<bits/stdc++.h>
using namespace std;
bool vis[10009];
long long q[10009];
long long inn;
void init(){
	vis[1]=1;
	for(long long i=2;i<=10000;i++){
		if(!vis[i]){
			q[++inn]=i;
		}
		for(long long j=1;j<=inn&&q[j]*i<=10000;j++){
			vis[q[j]*i]=1;
			if(i%q[j]==0){
				break;
			}
		}
	}
}
long long n,w;
map<long long,long long> f[10009];
long long aa[10009];
void st(long long x){
	long long d;
	d=1;
	for(long long i=1;i<=n;i++){
		if(f[i][x]<f[d][x]){
			d=i;
		}
	}
	f[d][x]++;
	aa[d]*=x;
}
int main(){
	init();
	cin>>n>>w;
	for(long long i=1;i<=n;i++){
		long long a;
		cin>>a;
		aa[i]=a;
		for(long long j=2;j<=sqrt(a);j++){
			while(a%j==0){
				f[i][j]++;
				a/=j;
			}
		}
		if(a!=1){
			f[i][a]++;
		} 
	}
	for(long long i=2;i<=sqrt(w);i++){
		while(w%i==0){
			st(i);
			w/=i;
		}
	}
	if(w!=1){
		st(w);
	}
	long long ans;
	ans=1;
	for(long long i=1;i<=n;i++){
		for(long long j=2;j<=sqrt(aa[i]);j++){
			if(aa[i]%j==0){
				ans*=(f[i][j]+1);
				ans%=998244353;
					aa[i]/=j;
			}
		}
		if(aa[i]!=1){
			ans*=f[i][aa[i]]+1;
			ans%=998244353;
		}
	}
	cout<<ans;
	return 0;
} 

100分:

#include<bits/stdc++.h>
using namespace std;
bool vis[10009];
long long q[10009];
long long inn;
void init(){
	vis[1]=1;
	for(long long i=2;i<=10000;i++){
		if(!vis[i]){
			q[++inn]=i;
		}
		for(long long j=1;j<=inn&&q[j]*i<=10000;j++){
			vis[q[j]*i]=1;
			if(i%q[j]==0){
				break;
			}
		}
	}
}
long long n,w;
map<long long,long long> f[10009];
long long aa[10009];
void st(long long x){
	long long d;
	d=1;
	for(long long i=1;i<=n;i++){
		if(f[i][x]<f[d][x]){
			d=i;
		}
	}
	f[d][x]++;
	aa[d]*=x;
}
int main(){
	init();
	cin>>n>>w;
	for(long long i=1;i<=n;i++){
		long long a;
		cin>>a;
		aa[i]=a;
		for(long long j=2;j<=sqrt(a);j++){
			while(a%j==0){
				f[i][j]++;
				a/=j;
			}
		}
		if(a!=1){
			f[i][a]++;
		} 
	}
	for(long long i=2;i<=sqrt(w);i++){
		while(w%i==0){
			st(i);
			w/=i;
		}
	}
	if(w!=1){
		st(w);
	}
	long long ans;
	ans=1;
	for(long long i=1;i<=n;i++){
		for(long long j=2;j<=sqrt(aa[i]);j++){
			if(aa[i]%j==0){
				ans*=(f[i][j]+1);
				ans%=998244353;
				while(aa[i]%j==0)
					aa[i]/=j;
			}
		}
		if(aa[i]!=1){
			ans*=f[i][aa[i]]+1;
			ans%=998244353;
		}
	}
	cout<<ans;
	return 0;
} 
2023/11/11 19:01
加载中...