/*
分析:
水题,刚开始想了一个有点儿麻烦的,方法,囧~
46MS,直接说方法了,假设N=C(n,m),那么直接暴力遍历C(n,1)到C(n,n)
(由于对称,所以后面一半是可以忽略的),每次N*=(n-m+1)、N/=m;如果
N%p==0,那么就找到符合的情况了。
但是N太大了,那怎么办类~,由于p是素数么,所以用count记录N里面有
几个p因子,N这个数就不用记录了,详细看代码吧。
好久某敲题了,所以废话多了点儿,囧~
2013-02-24
*/
分析:
水题,刚开始想了一个有点儿麻烦的,方法,囧~
46MS,直接说方法了,假设N=C(n,m),那么直接暴力遍历C(n,1)到C(n,n)
(由于对称,所以后面一半是可以忽略的),每次N*=(n-m+1)、N/=m;如果
N%p==0,那么就找到符合的情况了。
但是N太大了,那怎么办类~,由于p是素数么,所以用count记录N里面有
几个p因子,N这个数就不用记录了,详细看代码吧。
好久某敲题了,所以废话多了点儿,囧~
2013-02-24
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"int main()
{int n,m,p;int t,ans;while(scanf("%d%d",&n,&p)!=-1){if(p>n) {printf("Where is hero from?\n");continue;}int count=0;ans=0;for(m=1;m<=n;m++){if(m>n/2) break;t=n-m+1;while(!(t%p)) {count++;t/=p;}t=m;while(!(t%p)) {count--;t/=p;}if(count<=0) continue;if(2*m==n) ans++;else ans+=2;}if(!ans) printf("Where is hero from?\n");else printf("%d\n",ans);}return 0;
}