文章

9

粉丝

0

获赞

90

访问

1.7k

头像
整除问题 题解:用 map 对比
P1284 上海交通大学机试题
发布于2026年2月5日 16:30
阅读数 144

关键点:

1.  思路:n! 和 a  可以分解为 1000以内的质因数的组合,

        1. 例如 (6!, 10 )= 2 3 5 2 2 3 2 1, 2 5,  而 2 和 5在 6! 的质因数中分别出现 的次数是 4和 1 ,取其小的,则得到 1。故 6! 只能被 10的 1次方整除。

2. 实现:getPrimeFac 得到1000内的质数, 然后 map<int,int> nFacMap, aFacMap; // n! 的质因数map, a的质因数map, key 是质因数,value 是出现次数。 然后对比即可。

写得乱糟糟的,并不好看,但是思路是比较简单的。

ps: 

#include <iostream>
#include <vector>
#include <map>
using namespace std;
// 预先获取 1000 内的质数
vector<int> primes;
void getPrimeFac(){
    int flag[1000] = {0};
    for(int i = 2; i < 1000; i++){
        if(flag[i] == 0){
            primes.push_back(i);
            for(int j = 2; i * j < 1000; j++){
                flag[i * j] = 1; // 标记合数
            }
        }
    }
}
int main(){
    int n,a;
    map<int,int> nFacMap, aFacMap; // n! 的质因数map, a的质因数map, key 是质因数,value 是出现次数
    getPrimeFac();

...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发