zoukankan      html  css  js  c++  java
  • 【bzoj4292】[PA2015]Równanie 暴力

    题目描述

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

    输入

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

    输出

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

    样例输入

    51 5000 10000

    样例输出

    3


    题解

    暴力

    考虑一个$le 10^{18}$的正整数,它的$f$值最大只有$f(999999999999999999)=9*9*18=1458$。

    所以可以枚举$f(n)$,然后判断是否有满足条件的$n$即可。

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    ll k , a , b;
    ll calc(ll n)
    {
    	ll ans = 0;
    	while(n) ans += (n % 10) * (n % 10) , n /= 10;
    	return ans;
    }
    ll solve(ll n)
    {
    	ll i , ans = 0;
    	for(i = 1 ; i <= 1458 ; i ++ )
    	{
    		if(i * k > n) break;
    		if(calc(i * k) == i) ans ++ ;
    	}
    	return ans;
    }
    int main()
    {
    	scanf("%lld%lld%lld" , &k , &a , &b);
    	printf("%lld
    " , solve(b) - solve(a - 1));
    	return 0;
    }
    

     

     

  • 相关阅读:
    Dockerfile构建镜像
    00基础复习
    docker的网络(基础)
    02-Mysql中的运算符
    01-mysql中的数据类型
    Docker客户端连接Docker Daemon的方式
    docker-ce快速部署
    ubuntu18.04 server配置静态ip
    html语义化小记录
    webpack导入es6的简单应用
  • 原文地址:https://www.cnblogs.com/GXZlegend/p/7323811.html
Copyright © 2011-2022 走看看