質因子分解
阿新 • • 發佈:2018-12-18
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m;
//int p[10000005];
//bool flag[10000005];
//int cnt=0;
int sum[3000];
//bool is_prime(int x)
//{
// for(int i=2;i<=n;i++)
// {
// if(!flag[i]) p[cnt++]=i;
// for(int j=0;j<cnt&&i*p[j]<=n;j++)
// {
// flag[i*p[j]]=1;
// if(i%p[j]==0) break;
// }
// }
// int l=0,r=cnt-1;
// while(l<r)
// {
// int mid=(l+r)>>1;
// if(a<=p[mid]) r=mid;
// else l=mid+1;
// }
// if(p[l]==x) return 1;
// return 0;
//}
bool is_prime(int x)
{
if(x==1) return 0;
if(x==2 || x==3) return 1;
if(x%6!=1&&x%6!=5) return 0;
for(int i=5;i<=sqrt(x);i+=6)
{
if((x%i==0&&x!=i) || (x%(i+2)==0&&x!=(i+2))) return 0;
}
return 1;
}
int main()
{
cin>>n;
m=n;
for(int i=1;i<=n;i++)
{
while((m%i==0) && is_prime(i))
{
sum[i]++;
m=m/i;
}
}
for(int i=1;i<=n;i++)
{
if(sum[i]!=0) cout<<i<<' '<<sum[i]<<endl;
}
}