codeforces 822D

来源:互联网 发布:三菱q系列plc编程手册 编辑:程序博客网 时间:2024/06/09 19:05

题目链接:

http://codeforces.com/problemset/problem/822/D

题解:

预处理很重要。

代码:

#include <cstdio>#include <cmath>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define met(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3fconst int maxn = 5*1e6;typedef  long long ll;const int mod = 1e9+7;ll num[maxn+10];ll prime[maxn+10];void init(){    met(num,0);    met(prime,0);    for(ll i=2;i<=maxn;i++)    {        if(num[i]==0)        {            for(ll j=i*i;j<=maxn;j+=i)            {                if(num[j]==0)                    num[j]=i;            }        }    }    for(ll i=2;i<=maxn;i++)    {        if(num[i]==0)            prime[i]=(i*(i-1)/2)%mod;        else        {            prime[i]=((prime[num[i]]*(i/num[i])%mod)%mod+prime[i/num[i]])%mod;        }    }}int main(){    init();    int t,l,r;    scanf("%d%d%d",&t,&l,&r);    ll sum=0,tt=1;    for(ll i=l;i<=r;i++)    {sum=(sum+(tt*prime[i])%mod)%mod;tt=(tt*t)%mod;}    cout<<sum<<endl;}
原创粉丝点击