题目链接:XDOJ-1022-A simple math problem 2
递推搞一搞~
设
f(i)
为f数组的前缀和,那么很容易得到第一个递推。
第二个递推求出
f(i)
。
第三个递推求出
f(i)
的前缀和。
然后就行了。
#include<bits/stdc++.h>
using namespace std;
const int mod=1007;
const int maxn=1e6+7;
int f[maxn],l,r;
int main()
{
for(int i=1;i<maxn;i++)
{
for(int j=i;j<maxn;j+=i)
++f[j];
}
for(int i=2;i<maxn;i++)
f[i]=(f[i-1]+f[i])%mod;
for(int i=2;i<maxn;i++)
f[i]=(f[i-1]+f[i])%mod;
f[0]=0;
while(~scanf("%d%d",&l,&r))
printf("%d\n",(f[r]-f[l-1]+mod)%mod);
return 0;
}