很简单一个模板,但看了好久不知道哪里有问题,还和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;
}