E Zeldain Garden

题意:计算出给定区间内所有数的因数个数

思路:首先,n之内的所有因数个数的计算方法为:n/1+n/2+n/3.....n/n;

   那么,直接枚举会超时,我们只要在计算的时候跳转一下即可

   那么怎么跳转呢。

   比如我们枚举n为6

   当我们枚举到n/(4,5,6)这三个数的时候,贡献都为1,我们就直接将答案都为1的这些直接全部计算出来,然后跳到下一种情况即可

 1 # include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 LL X(LL n)
 5 {
 6     LL l, r;
 7     LL ans = 0;
 8     for( l = 1; l <= n; l = r+1)
 9     {
10         r = n/(n/l);
11         ans += n/l *(r - l + 1);
12     }
13     return ans;
14 }
15 int main(){
16     int t;
17         LL x,y;
18         cin>> x>>y;
19         printf("%lld\n",X(y)-X(x-1));
20 }

 

posted @ 2020-10-02 10:25  古比  阅读(172)  评论(0编辑  收藏  举报