关闭

codeforces 597A

标签: codeforcesCFmath
319人阅读 评论(0) 收藏 举报
分类:

题意:首先给你3个数,k,a,b然后让你找出在[a, b]区间中能 整除k 的数  的总数。


先说一下这个题我当时看到的时候是什么感觉,我第一个反应就是找出k的倍数a,b之间的就可以了。

后来我们才发现这个题没有那么简单,(1 ≤ k ≤ 1018; - 1018 ≤ a ≤ b ≤ 1018).因为这个范围太大了。


其实我们只需要转换一下思维就可以了,我是让k乘上一个数满足在a,b之间,其实我只需要让a,b同时除以k

就可以得到一个区间了。


这就需要考虑到是否能够整除的问题了,其实还是可以解决的,比如k=2,a=-7,b=7;实际我们的区间只需要[-6,6];


#include<bits/stdc++.h>//这个头文件基本包含了所有C++的头文件,不用每次都写一大堆,但是poj和hdu还不适用
using namespace std;
int main()
{
    long long k,a,b;
    while(~scanf("%I64d%I64d%I64d",&k,&a,&b))
    {
        long long low,high;
        low=((a%k)+k)%k;
        low=a+(low==0?0:k-low);//找到最小的a
        
        high=((b%k)+k)%k;
        high=b-high;       //找到最大的b
        printf("%I64d\n",(high/k)-(low/k)+1);
    }
}


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13299次
    • 积分:614
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条