simplecomplex's blog

By simplecomplex, history, 7 years ago, In English

Here's the problem from last year's ACM ICPC Dhaka Regional Preliminary Round.

It says to calculate sod(n) [sum of digits of n] while n >= 10. Here n = a^b, (0<= a,b <= 10^50,000 and a+b>0 ) Any thoughts on how to solve this?

Full text and comments »

  • Vote: I like it
  • +6
  • Vote: I do not like it

By simplecomplex, history, 7 years ago, In English

I was trying to solve a problem on LightOJ which says to calculate C(n,r) modulo P where (1<=n,r<=1000000 and P=1000003). It has at most 2000 queries.

I found this solution on the web,but I can not find how it works. can anyone explain it please?

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int N=1e6+3;
const int mod=1e6+3;
ll A[N],B[N];
ll bigmod(ll n,ll p)
{
	if(p==0)return 1LL;
	if(p&1)return ((n%mod)*bigmod(n,p-1))%mod;
	ll a=bigmod(n,p/2);
	return (a*a)%mod;
}

int main()
{
	int tc;
	scanf("%d",&tc);
	A[1]=B[1]=1;
	A[0]=B[0]=1;
	for(int i=2;i<N;++i){
		A[i]=(A[i-1]*i)%mod;
		B[i]=(B[i-1]*bigmod((ll)i,mod-2))%mod;
	}
	for(int cs=1;cs<=tc;++cs){
		int n,r;
		scanf("%d%d",&n,&r);
		printf("Case %d: %lld\n",cs,(A[n]*((B[n-r]*B[r])%mod))%mod);
	}
	return 0;
}

Full text and comments »

  • Vote: I like it
  • 0
  • Vote: I do not like it