3281: 喵喵的数学难题
最近,喵喵一直在学习数学。他发现了,任意一个正整数N,都可以被一素数整除。
发现了这个结论的他特别高兴。有一天,lls给了喵喵一个数字N,
一本正经地告诉他:“你能求所有能整除N!的素数和其相应的数量吗?”
喵喵想了想说:“直接算不就好了嘛~”
lls笑了笑说:“小老弟你还是太年轻~”
你能帮助喵喵顺利求解这个问题吗?
输入
一个整数N (1≤N≤10^5)
输出
所有能整除N!的素数和其数量,共若干行,每行一对pi, ni,按照pi从小到大的顺序输出。
样例输入
5
样例输出
2 3
3 1
5 1
http://202.194.119.110/problem.php?id=3281
#include<bits/stdc++.h>
using namespace std;
int pi[100005];
int main()
{
memset(pi,0,sizeof(pi));
int n;
cin>>n;
for(int i=2;i<=n;i++)
{
int a=i;
for(int j=2;j*j<=i;j++)// j*j<=i x=j因为 保证所有的质因子都能取到,,i这个状态时,j*j=i,,i/=j i变小了,变小后的i取根号 得到的值会比x小
{
while(a%j==0)
{
pi[j]++;
a/=j;
}
} // 剩下的一定是质因子 如果不能让 x前面的数消化掉,,说明剩下的质因子,会比x大。
if(a>1)
pi[a]++;
}
for(int i=1;i<=n;i++)
{
if(pi[i]>0)
cout<<i<<" "<<pi[i]<<endl; // 放心打印,,因为1---n的所有数 都可以写成质数的乘积,,这里数组的下标是合数的值是0
}
return 0;
}