文章

74

粉丝

0

获赞

98

访问

8.9k

头像
整除问题 题解(求质因子解法):
P1284 上海交通大学机试题
发布于2025年8月9日 18:04
阅读数 144

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);
        
       ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发