文章
9
粉丝
0
获赞
90
访问
1.7k
关键点:
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();
...
登录后发布评论
暂无评论,来抢沙发