• 【枚举】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem G. Equation


    f(n)定义为n的十进制表示下所有位的平方和。

    问你方程K*f(n)=n在a<=n<=b中的解的个数。

    发现f(n)最大不超过2000,可以直接枚举f(n),然后判断K*f(n)的位的平方和是否恰好为f(n)。

    #include<cstdio>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    ll K,a,b;
    int main(){
    //	freopen("g.in","r",stdin);
    	int ans1=0,ans2=0;
    	cin>>K>>a>>b;
    	for(ll fn=1;fn<=2000ll;++fn){
    		if(fn>(a-1ll)/K){
    			break;
    		}
    		ll N=fn*K;
    		ll t=0;
    		while(N){
    			t+=(N%10ll)*(N%10ll);
    			N/=10ll;
    		}
    		if(t==fn){
    			++ans1;
    		}
    	}
    	for(ll fn=1;fn<=2000ll;++fn){
    		if(fn>b/K){
    			break;
    		}
    		ll N=fn*K;
    		ll t=0;
    		while(N){
    			t+=(N%10ll)*(N%10ll);
    			N/=10ll;
    		}
    		if(t==fn){
    			++ans2;
    		}
    	}
    	printf("%d
    ",ans2-ans1);
    	return 0;
    }
  • 相关阅读:
    设计模式学习
    rabbitMQ topic实现广播
    rabbitMQ direct实现广播
    rabbitMQ fanout 实现广播
    rabbitMQ 生产者消费者
    python select 实现IO异步
    python gevent 爬虫
    python gevent socket
    python 协程
    python 进程池
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7327355.html
Copyright © 2020-2023  润新知