童话II |
Time Limit: 1 Seconds Memory Limit: 32768 K Total Submit:149 Accepted:59 |
Description 很善良很善良的小猪顺利地解决了很可爱很可爱的小猫的问题,小猫因此不但没生小猪的气,还因为小猪的聪明和善良对他芳心暗许。但是好景不长,有一天,很贪吃很贪吃的猫妈妈发现挂在外面的香蕉都不见了,她自己一根都没吃成。猫妈妈怀疑是小猪偷吃的,非常生气,不肯让小猪和小猫来往了。 但是事情总是有转机的,有一天,猫妈妈被一道有关杨辉三角的问题难住了。她听说小猪很聪明,于是就把他叫了过来,答应只要把这个问题解决了,就允许他和小猫继续交往。 这个问题是这样的,我们都知道杨辉三角: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 .....猫妈妈想知道的就是杨辉三角的n+1行的n+1数中,有多少个数是可以被质数p整除的。 小猪很聪明,他很快就从杨辉三角和组合数的关系,以及阶乘求质因子数的方法,想出了解决这个问题的办法。但是猫妈妈不肯罢休,她告诉小猪N可能很大,达到10 9,这样,小猪原来想的方法就要算很长时间。怎么办呢,小猪陷入了沉思。 这时,来了一只更善良更可爱的小老鼠,他看不过猫妈妈为难小猪,提出了这个问题的思路: 把n转化为p进制,再把每个位上的值+1后,所得的结果相乘,其乘积就是杨辉三角n+1行中不能被p整除的个数。 猫妈妈不开心了,就要扑过来,小老鼠只好先跑开了。在那之后,小猪很快就把程序写出来了。从此,小猪和小猫幸福地生活在了一起。 各位同学,你们也想试试吗? Input 第一行有一个整数N,表示测试数据的组数。 接下来有N行,每行输入两个整数,P,N 其中P是个质数,且p<1000 而 0<N<=109 Output 针对每行输入,输出一个整数,表示杨辉三角的第n+1行有多少个数能被质数p整除 Sample Input 2 3 3 5 11
Sample Output 2 6
Source Piao(Ruoqian,Chen) @ FNOJ |
Source: #include<iostream> using namespace std; int main() { int m,p;long n,k,w; cin>>m; while(m--) { k=1; cin>>p>>n; w=n; if(p==1) k=0; else { while(n>=p) { k*=n%p+1; n=n/p; } if(n>0) k*=n+1; } cout<<w-k+1<<endl; } }
|