[BZOJ4292] [PA2015]Równanie

题目描述

Description

对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和。现在给定三个正整数k,a,b,请求出满足a<=n<=b且k*f(n)=n的n的个数。

Input

第一行包含三个正整数k,a,b(1<=k,a,b<=10^18,a<=b)。

Output

输出一个整数,即满足条件的n的个数。

Sample Input

51 5000 10000

Sample Output

3

题目分析

注意到极限f(n)情况是1458 那么暴力判断一波~

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
long long k,a,b;
int ans;
int main()
{
    scanf("%lld%lld%lld",&k,&a,&b);
    for(int i=1;i<=1458;i++)
    {
        long long x=k*i;
        if(x<a)  continue;
        if(x>b)  break;
        int tmp=0;
        while(x)    tmp+=(x%10)*(x%10),x/=10;
        if(tmp==i)  ans++;
    }
    printf("%d",ans);
    return 0;
}

发表评论

邮箱地址不会被公开。 必填项已用*标注