|
童话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可能很大,达到109,这样,小猪原来想的方法就要算很长时间。怎么办呢,小猪陷入了沉思。
这时,来了一只更善良更可爱的小老鼠,他看不过猫妈妈为难小猪,提出了这个问题的思路:
把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;
}
}
|

1万+

被折叠的 条评论
为什么被折叠?



