当前位置:   article > 正文

CodeForces 597A(公式+技巧)_codeforce 597a

codeforce 597a
I - Divisibility
Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Description

Find the number of k-divisible numbers on the segment [a, b]. In other words you need to find the number of such integer values x thata ≤ x ≤ b and x is divisible by k.

Input

The only line contains three space-separated integers ka and b (1 ≤ k ≤ 1018; - 1018 ≤ a ≤ b ≤ 1018).

Output

Print the required number.

Sample Input

Input
1 1 10
Output
10
Input
2 -4 4
Output
5

方法1:
思路:
  简单的思路,就是先从a开始,找到第一个能被k整除的数t,然后跟b比较,如果比b大,那么就不存在,输出0,否则的话就看从k到b有多少个k,结果输出k+1;
  但是在找第一个能被k整除的数的时候,要分a是正数还是负数,如果是正数的话,就直接在a的基础上加上k-a%k(也就是大于a能够取余k的最小的数);
如果是负数的话,用a加上多余的那部分(-a%k),就将那部分给抵消了(满足 大于a能够取余k的最小的数),按照上面的方法就能做出来了!
代码:
  1. //A了
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <algorithm>
  5. using namespace std;
  6. int main()
  7. {
  8. __int64 k,a,b;
  9. while(scanf("%I64d%I64d%I64d",&k,&a,&b)!=EOF)
  10. {
  11. __int64 t,u;
  12. u=a%k;
  13. if(u==0)
  14. {
  15. t=a;
  16. }
  17. else
  18. {
  19. if(u<0)
  20. {
  21. u=-u;
  22. t=a+u;//因为负的时候是将它的余数往上加的才能是大于a的,
  23. }//负数应该和正数是对称的!!!
  24. else
  25. {
  26. t=a+(k-u);
  27. }
  28. }
  29. if(t<=b)
  30. {
  31. __int64 sum=1;
  32. sum+=(b-t)/k;
  33. printf("%I64d\n",sum);
  34. }
  35. else
  36. {
  37. printf("0\n");
  38. }
  39. }
  40. return 0;
  41. }

方法2:
思路:
因为在0<=a<=b的时候有这个公式sum=b/k-(a-1)/k;所以我们可以想办法将其他区间也转化成这种情况;
总共有三种情况:a>0&&b>0 sum= b/k-(a-1)/k;
               a<0&&b<0 sum=-a/k-(-b-1)/k;
               a<=0&&b>=0 sum=-a/k+1+b/k;
代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. #define INF 1000000000000000000
  5. using namespace std;
  6. int main()
  7. {
  8. __int64 k,a,b;
  9. while(scanf("%I64d%I64d%I64d",&k,&a,&b)!=EOF)
  10. {
  11. __int64 sum;
  12. if(a>0&&b>0)
  13. sum=b/k-(a-1)/k;
  14. else if(a<0&&b<0)
  15. {
  16. sum=-1*a/k-(-1*b-1)/k;
  17. }
  18. else if(a<=0&&b>=0)
  19. {
  20. sum=-1*a/k+1+b/k;
  21. }
  22. printf("%I64d\n",sum);
  23. }
  24. return 0;
  25. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/72565
推荐阅读
相关标签
  

闽ICP备14008679号