文章
99
粉丝
120
获赞
8
访问
96.8k
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
//getPrime就是统计质因子个数的。
void getPrime(vector<int>& factors, int n){
for(int i=2; i*i<=n; i++){
while(n % i == 0){
factors[i]++;
//相当于用数组计数,因为题中范围不大,所以可以直接开辟一个1000的数组。
//并不是所有位置都用,只有成为n以及后面n--的质因子的位置才用。确实是稍微浪费了一些空间。
n /= i;
//这一步就是为了知道该数字有多少了等于i的质因子。比如单独考虑,12=2*2*3,里面有两个2,一个3。
//则这一步以后factors[2]==2,factors[3]==1。
if(n <= 1)
return;
}
}
if(n > 1)
factors[n]++;
//自身是一个。
}
int main()
{
int n,a;
while(cin>>n>>a)
{
vector<int> factor_a(1000), factor_n(1000);
getPrime(factor_a,a);
for(int i=2;i<=n;i++)
getPrime(factor_n,i);在i的质因子统计完以后,factor的已经存了个数,后续也是在这个基础上加
int k=1000;
for(int i=2;i<=a;i++)//为什么小于a,上述文字已经说明
{
if(factor_a[i])
k=min(k,factor_n[i]/factor_a[i]);注意前文定义k为int型。
}
cout<<k<<endl;
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发