bzoj4292 [PA2015]Równanie

[PA2015]Równanie

Time Limit: 1 Sec Memory Limit: 256 MB

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

HINT

满足的3个n分别为7293,7854和7905。



其实 \(f(n)\) 很少,所以这是一道**题。
每个 \(f(n)\) 有且仅对应一个数。就好了。


#include<bits/stdc++.h>
using namespace std;
long long k, a, b;

inline int lpl(long long t)
{
    int ret = 0;
    while(t){
        ret += (t % 10) * (t % 10);
        t /= 10;
    }
    return ret;
}

int main()
{
    scanf("%lld%lld%lld", &k, &a, &b);
    long long i, ans = 0;
    for(i = 0; i <= 1911 && i <= b / k; ++i){
        if(i * k >= a && lpl(i * k) * k == i * k) ans++;
    }
    cout << ans;
    return 0;
}

写数位dp的我真的很坚强。。。。
然后就弃疗了。。。

猜你喜欢

转载自www.cnblogs.com/LLppdd/p/9159153.html