PKU3406

今日もodzさんのところから問題ゲット(id:odz:20080113)。
ただ、他の人と比べてメモリの使用量がすんごい事になってる。
ううむ、なんか、実装に大分差がありそうだなー。
問題がだるい大きさなのでコードサイズの削減がかなーり適当です。
たぶん、普通にまだ削れる気がする。


1の位の頻度表作って計算するだけー
エラトステネス君がメモリ食いすぎー

#import<algo.h>
long long n,r,x=1,y,p['___'],t[9];
main(){
	for(cin>>n>>r;x++<n;){
		for(y=x;!p[x]&y<=n;)p[y+=x]=1;
		for(y=x;!p[x]&y<=n;y*=x)t[x%10]+=n/y-(n-r)/y-r/y;
	}
	t[2]-=x=t[2]<?t[5];
	t[5]-=x;
	for(r=n=1;n++<9;)
		for(y=t[x=n]&3;y%2?r=r*x%10:y;y/=2)
			x*=x;
	cout<<r<<"\n";
}

こっそり追記:
<<"\n"とか必要ないだろ常考
あとg++のalgorithmにはpowerあったよなぁとか記憶から引きずり出してきた。

#import<algo.h>
long long n,r,x=1,y,p['___'],t[9];
main(){
	for(cin>>n>>r;x++<n;){
		for(y=x;!p[x]*n/y;)
			p[y+=x]=1;
		for(y=x;!p[x]*n/y;y*=x)
			t[x%10]+=n/y-(n-r)/y-r/y;
	}
	t[2]-=x=t[2]<?t[5];
	t[5]-=x;
	for(r=n=1;n++<9;)
		r*=power(n,t[n]&3);
	cout<<r%10;
}