1. 程式人生 > >高精度算法_求組和

高精度算法_求組和

精度 r+ bits out 題目 ace ans sin include

題目原型是洛谷的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; }

高精度算法_求組和