洛谷 质因子分 p2043

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

const int N = 10000+50;
bool isprime[N];
int prime[N/2],pn;
int ans[N];
void getPrimes(int maxn)
{
pn = 0;
memset(isprime,true,sizeof(isprime));
isprime[0] = isprime[1] = false;
for(int i=2;i<=maxn;i++)
{
if(isprime[i]) prime[++pn] = i;
for(int j=1;j<=pn;j++)
{
if(i*prime[j]>maxn) break;
isprime[i*prime[j]] = false;
if(i%prime[j]==0) break;
}
}
return;
}
int main()
{
getPrimes(N);
int n;
cin >> n;
for(int i=2;i<=n;i++)
{
int tmp = i;
for(int j=1;j<=pn;j++)
{
while(tmp%prime[j]==0)
{
ans[prime[j]]++;
tmp/=prime[j];
}
}
}
for(int i=1;i<=n;i++)
{
if(ans[i])
{
cout << i << " " << ans[i] << endl;
}
}
return 0;
}

上一篇:Java中对List集合的常用操作


下一篇:JDK 1.6 下载 地址