文章
3
粉丝
354
获赞
2
访问
26.8k
具体思路如下:1. 求出n!的所有素因数,开一个数组p1,以值为下标保存个数。该题n为1000以内,开一个1000的数组就可以了。默认值都为0
2. 求出a的所有素因数,同样开一个数组p2,以值为下标保存个数。默认值都为0
3. 通过求得的素数数组把p1,p2数组的值全部赋值完毕。比如得到一个素因数i,就p1[i]或者p2[i]的值加一就可以了。
4. 最后就是循环比较了,先设置K为0,每次循环k+1,循环内部是比较p1和p2的所有的值(比较素数就可以了,因为先前只存了素因数,要不然比较慢),若p1[prime[i]]<p2[prime[i]]*k,就可以退出了,因为此时必然不可能整除了。
#include<bits/stdc++.h>
using namespace std;
const int max1=1000+5;
int prime[max1];
void getprime(){
memset(prime,0,sizeof(prime));
for(int i=2;i<=max1;i++){
if(!prime[i]) prime[++prime[0]]=i;
for(int j=1;j<=prime[0]&&prime[j]*i<=max1;j++)
{
prime[prime[j]*i]=1;
if(i%prime[j]==0)break;
}
}
}
int main(){
int n...
登录后发布评论
暂无评论,来抢沙发