因数分解求调
  • 板块学术版
  • 楼主rmzls
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/5/5 18:15
  • 上次更新2023/10/23 16:35:42
查看原帖
因数分解求调
261574
rmzls楼主2023/5/5 18:15

很简单一个模板,但看了好久不知道哪里有问题,还和oi wiki上的对了一下,求好心人看看

具体情况就是当m调小的时候cnt加着加着会莫名其妙变回1

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e4+5,M=30;
int prime[M],vis[M],cnt,n,t,a[N],yins[M];
void getp(){
	for(int i=2;i<=M;i++){
		if(i<1000)printf("%lld\n",cnt);
		if(!vis[i]){
			prime[++cnt]=i;
		}
		for(int j=1;j<=cnt;j++){
			if(i*prime[j]>M){
				break;
			}
			vis[i*prime[j]]=1;
			if(i%prime[j]==0){
				break;
			}
		}
	}
}
void fenj(int k){
	for(int i=1;prime[i]*prime[i]<=k&&i<=cnt;i++){
		while(k%prime[i]==0){
			k/=prime[i];
			yins[i]++;
		}
		if(!k||k==1){
			break;
		}
	}
}
signed main(){
	getp();
	scanf("%lld",&t);
	fenj(t);
	for(int i=1;i<=cnt;i++){
		if(yins[i]){
			printf("%lld %lld\n",prime[i],yins[i]);
		}
	}
	return 0;
} 
2023/5/5 18:15
加载中...