Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define mp make_pair
- #define fst first
- #define snd second
- #define M 1000000
- #define MOD 987654321
- using namespace std;
- typedef long long ll;
- int p[1<<20],np;
- int q[1<<20];
- int w[1<<20];
- int f[1<<20];
- int st[1<<21];
- void st_init(){
- for(int i=0;i<(1<<21);++i)st[i]=1;
- }
- int pst,vst;
- void st_upd(int k, int s, int e){
- if(s+1==e){st[k]=vst;return;}
- int m=(s+e)/2;
- if(pst<m)st_upd(2*k,s,m);
- else st_upd(2*k+1,m,e);
- st[k]=((ll)st[2*k]*st[2*k+1])%MOD;
- }
- int main(){
- memset(q,-1,sizeof(q));
- np=0;
- for(int i=2;i<=M;++i){
- if(q[i]<0){
- p[np]=i;
- for(int j=i;j<=M;j+=i)q[j]=np;
- np++;
- }
- }
- st_init();
- f[1]=1;
- for(int i=2;i<=M;++i){
- int k=i;
- int l=-1;
- while(k>1){
- if(l>=0&&l!=q[k]){
- pst=l;vst=w[l]+1;
- st_upd(1,0,np);
- }
- w[q[k]]++;
- l=q[k];
- k/=p[q[k]];
- }
- pst=l;vst=w[l]+1;
- st_upd(1,0,np);
- f[i]=st[1];
- }
- int k,n;
- while(scanf("%d%d",&n,&k)!=EOF){
- printf("%lld\n",((ll)f[n]+MOD-f[k])%MOD);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement