文章
74
粉丝
0
获赞
98
访问
8.9k
n!=1*2*3*...*n,所以n!的质因子就是1、2、3、...... 、n的质因子的集合
a^k=a*a*...*a,那么a^k的质因子的集合就是a的质因子集合乘k
#include<bits/stdc++.h>
using namespace std;
// 线性素数筛
const int maxn = 1000 + 5;
int prime[maxn];
void getPrime(){
memset(prime, 0, sizeof(prime));
for(int i = 2; i < maxn; i ++){
if(prime[i] == 0) prime[++ prime[0]] = i;
for(int j = 1; j <= prime[0] && i * prime[j] <= maxn; j ++){
prime[i * prime[j]] = 1;
if(i % prime[j] == 0) break;
}
}
}
// 分解得到num的素数因子,下标为因子,值为该因子的指数
void divide2Prime(int num, int *a){
for(int i = 1; i <= prime[0] && prime[i] <= sqrt(num); i ++){
while(num % prime[i] == 0){
a[prime[i]] ++;
num /= prime[i];
}
}
if(num > 1) a[num] ++;
}
int main(){
getPrime();
int n, a;
while(cin >> n >> a){
int np[1005] = {0};
int ap[1005] = {0};
// 求出!n的质因子分解情况
for(int i = 2; i <= n; i ++) divide2Prime(i, np);
...
登录后发布评论
暂无评论,来抢沙发