童话II

FJNU.1910

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 

My Program

#include < iostream >
using   namespace  std;

long  search( long  n, long  p)
{
    
int a[35];
    
int i,k=0;
    
long m=1;
    
while(n>0)
    
{
        a[k
++]=n%p;
        n
/=p;
    }

    
for(i=0;i<k;i++)
        m
*=a[i]+1;
    
return m;
}


int  main()
{
    
long k,n,p;
    cin
>>k;
    
while(k)
    
{
        cin
>>p>>n;
        cout
<<n+1-search(n,p)<<endl;
        k
--;
    }

    
return 0;
}

YOYO's Note:
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄它是华丽的分隔线

【题意简述】

把十进制的n转化为p进制,再把每个位上的数相乘得到的数就是扬辉三角第n+1行中不能被质数p整除的个数。
给定N和P,求第N+1行能被质数P整除的个数。


【粗略分析】

题目中已经将数学方法都写好了,我们只需要求出不能被质数p整除的个数,再用n+1去减就可以了。


【C++源代码】

#include < iostream >
using   namespace  std;

long  search( long  n, long  p)
{
    
int a[35];
    
int i,k=0;
    
long m=1;
    
while(n>0)
    
{
        a[k
++]=n%p;
        n
/=p;
    }

    
for(i=0;i<k;i++)
        m
*=a[i]+1;
    
return m;
}


int  main()
{
    
long k,n,p;
    cin
>>k;
    
while(k)
    
{
        cin
>>p>>n;
        cout
<<n+1-search(n,p)<<endl;
        k
--;
    }

    
return 0;
}


【注意事项】

※ 是先输入P再输入N……因此我前后一共花了12个RE,5个WA,1个CE,最后终于AC了……


【点评】

要细心看输入……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值