
因为是大数运算,所以要开一个vector专门用来存放每一位数据。
方法:
1.分解质因数得到所有的primes,然后计算每个排列组合中primes[i]出现的次数num[i]。
2.采用高精度乘法对每一个primes[I]进行num[i]次计算,最终结果进行运算。
输入样例:
1010 502
输出样例:
270542318641875451437878008037962056604654394411733770412269545106703365435015551208195265578562824139490418486734890079966447607824774188774197604049652695010198244666270118340672566858743750778893630922581436222796091305438213110930923691380324123543340109236414731145200989641304439607812393726614400
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int primes[N],co;
bool st[N];
void p(int n) //筛选出所有互质的数
{
co=0;
for(int i=2;i<=n;i++)
{
if(!st[i]) primes[co++]=i;
for(int j=0;primes[j]<=n/i;j++)
{
st[primes[j]*i]=1;
if(i % primes[j]==0) break;
}
}
}
int calc(int n,int pr) //计算每一个数的阶乘具有多少个primes[i]
{
int s=0;
while(n>0)
{
s+=n

本文介绍了一种利用质因数分解和高精度乘法处理大数运算的方法,通过筛选质数并计算每种质数在阶乘中出现的次数,再使用高精度乘法进行计算,实现大数的阶乘运算。
最低0.47元/天 解锁文章
440

被折叠的 条评论
为什么被折叠?



