10
13
2015
0

4292: [PA2015]Równanie

4292: [PA2015]Równanie

Time Limit: 1 Sec  Memory Limit: 256 MB
Submit: 181  Solved: 94
[Submit][Status][Discuss]

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。


 

 

Source

    因为f的范围最大是9*9*18所以可以直接枚举f。。。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
long long k,a,b,ans;
int OK(long long x){
	int res = 0;
	while (x)	res+=(x%10)*(x%10),x/=10;
	return res;
}
int main(){
	scanf("%lld%lld%lld",&k,&a,&b);
	for(int i=min(b/k,1458ll);i;i--){
		long long n = i*k;
		if (a<=n && n<=b && OK(n)==i) ans++;
	}
	printf("%lld",ans);
}
Category: BZOJ题解 | Tags: | Read Count: 465

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com