题目大意:
对于操作p(n),为n的所有数字的成绩,如p(1234)=1*2*3*4=24,如果对于n%p(n)=0,那么我们称n为good number,对于n与n+1都为good number,那么n为perfect number
给定一个数k(1<=k<=1000000),求出位数为k的perfect number的个数
解题思路:
首先我想打表找规律,但是我后来发现打到k=7,8就差不多了,完全没法找规律,然后我就果断决定用数学方法做了。
我们设n的各位数为a1,a2,a3,a4,a5。。。。。。。ak, a1为个位,依次类推(显然ai!=0),所以ai为正整数
很容易发现,对于perfect number,a1!=9,因为如果a1=9,n+1的个位就为0了,显然是错的
所以n+1各位数为a1+1,a2,a3,a4,a5.。。。。。。ak。
p(n)=a1*a2*a3*....*ak, p(n+1)=(a1+1)*a2*a3*.....*ak
令n=t*a1*a2*....*ak n+1=t'*(a1+1)*a2*....*ak
所以1=n+1-n=a2*a3*.....*ak*(t'*a1+a1-t*a1)
因为a1.。。。。ak为正整数
所以a2=a3=。。。。=ak=1
所以a1|n && a1+1|n+1
所以我们只需要讨论a1的情况就行了(请读者自己讨论)
附上代码:
//本人是纯朴的C党
#include <stdio.h>
int k=0;
int main()
{
int sum=0;
scanf("%d",&k);
sum=1;
if(k==1)
sum=8;
else if((k-1)%3==0)
{
sum+=2;
if((k-1)%6==0)
sum+=1;
}
printf("%d",sum);
return 0;
}