高精度算法_求组和
题目原型是洛谷的P1771
#include<bits/stdc++.h> using namespace std; int k,x; int a[100]; int ans; int ksm(int b,int p,int k){ //快速幂 ans=1; while(p){ if(p&1) ans=ans*b%k; b=b*b%k,p>>=1; } return ans; } void p(){ for(int i=a[0];i>=1;i--) cout<<a[i]; } void comb(int r,int n){ a[0]=1; a[1]=1; for(int i=r+1;i<=n;i++){ //求 (r+1)...(n) for(int j=1;j<=a[0];j++) a[j]*=i; int tmp=0; for(int j=1;j<=a[0];j++){ tmp+=a[j]; a[j]=tmp%10; tmp/=10; } while(tmp){ a[++a[0]]=tmp%10; tmp/=10; } } for(int i=2;i<=n-r;i++){ //模仿竖式除法 除以 (n-r)! int tmp=0; for(int j=a[0];j>=1;j--){ tmp*=10; tmp+=a[j]; a[j]=0; if(tmp>i){ a[j]=tmp/i; tmp%=i; } } while(a[a[0]]==0) a[0]--; } } int main(){ cin>>k>>x; x%=1000; x=ksm(x,x,1000)-1; comb(k-1,x); p(); return 0; }