Topic Description
Transfer Door solving
The question is about the same as the ticket change.
High precision is required when calculating
After breaking down the decomposition, you just need a high precision multiplication and a high precision subtraction to code
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <
Cmath> using namespace std;
#define N 10000 int n,m;
int prime[n+1],p[n+1],cnt[n+1],num[n+1]; struct data{int a[n+1];}
Ans1,ans2,ans;
void Get () {for (int i=2;i<=n;++i) {if (!p[i]) prime[++prime[0]]=i,num[i]=prime[0];
for (int j=1;j<=prime[0]&&i*prime[j]<=n;++j) {p[i*prime[j]]=1;
if (i%prime[j]==0) break;
}} Data Cheng (data a,int b) {Data ans;memset (ans.a,0,sizeof (ANS.A));
int len=a.a[0];
for (int i=1;i<=len;++i) ans.a[i]=a.a[i]*b;
for (int i=1;i<=len;++i) {ANS.A[I+1]+=ANS.A[I]/10;
ans.a[i]%=10;
while (Ans.a[len+1]) {++len;
ANS.A[LEN+1]+=ANS.A[LEN]/10;
ans.a[len]%=10;
} Ans.a[0]=len;
return ans;
Data Jian (data A,data b) {Data ans;memset (ans.a,0,sizeof (ANS.A));
int len=a.a[0];for (int i=1;i<=len;++i) {if (a.a[i]<b.a[i])--a.a[i+1],a.a[i]+=10;
Ans.a[i]=a.a[i]-b.a[i];
while (!ans.a[len])--len;
Ans.a[0]=len;
return ans;
int main () {get ();
scanf ("%d%d", &n,&m);
for (int i=n+1;i<=n+m;++i) {int x=i; for (int j=1;j<=prime[0]&&x>1&&prime[j]*prime[j]<=x;++j) while (x%prime[j]==0) ++cnt[
J],X/=PRIME[J];
if (x>1) ++cnt[num[x]];
for (int i=1;i<=m;++i) {int x=i; for (int j=1;j<=prime[0]&&x>1&&prime[j]*prime[j]<=x;++j) while (x%prime[j]==0)--cnt[
J],X/=PRIME[J];
if (x>1)--cnt[num[x]];
} ans1.a[0]=ans1.a[1]=1;
for (int i=1;i<=prime[0];++i) while (Cnt[i]) Ans1=cheng (ans1,prime[i)),--Cnt[i];
for (int i=n+2;i<=n+m;++i) {int x=i; for (int j=1;j<=prime[0]&&x>1&&prime[j]*prime[j]<=x;++J) while (x%prime[j]==0) ++cnt[j],x/=prime[j];
if (x>1) ++cnt[num[x]];
for (int i=1;i<=m-1;++i) {int x=i; for (int j=1;j<=prime[0]&&x>1&&prime[j]*prime[j]<=x;++j) while (x%prime[j]==0)--cnt[
J],X/=PRIME[J];
if (x>1)--cnt[num[x]];
} ans2.a[0]=ans2.a[1]=1;
for (int i=1;i<=prime[0];++i) while (Cnt[i]) Ans2=cheng (ans2,prime[i)),--Cnt[i];
Ans=jian (ANS1,ANS2);
for (int i=ans.a[0];i>=1;--i) Putchar (ans.a[i]+ ' 0 ');p utchar (' \ n '); }