BZOJ 4292 PA2015 Równanie 枚舉

f(n)n 在十進制下每一位數字的平方和,求[a,b] 區間內有多少n 滿足kf(n)=n

容易發現最大的f(n) 不會超過9918=1458 ,因此我們枚舉f(n)O(logn) Check即可

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
long long k,a,b;
int F(long long x)
{
    int re=0;
    while(x)
        re+=(x%10)*(x%10),x/=10;
    return re;
}
int main()
{
    int i,ans=0;
    cin>>k>>a>>b;
    for(i=min(b/k,1458ll);i;i--)
    {
        long long n=i*k;
        if(n>=a&&i==F(n))
            ++ans;
    }
    cout<<ans<<endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章