Advertisement
Guest User

Untitled

a guest
Apr 30th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define mp make_pair
  3. #define fst first
  4. #define snd second
  5. #define M 1000000
  6. #define MOD 987654321
  7. using namespace std;
  8.  
  9. typedef long long ll;
  10.  
  11. int p[1<<20],np;
  12. int q[1<<20];
  13. int w[1<<20];
  14. int f[1<<20];
  15. int st[1<<21];
  16.  
  17. void st_init(){
  18. for(int i=0;i<(1<<21);++i)st[i]=1;
  19. }
  20.  
  21. int pst,vst;
  22.  
  23. void st_upd(int k, int s, int e){
  24. if(s+1==e){st[k]=vst;return;}
  25. int m=(s+e)/2;
  26. if(pst<m)st_upd(2*k,s,m);
  27. else st_upd(2*k+1,m,e);
  28. st[k]=((ll)st[2*k]*st[2*k+1])%MOD;
  29. }
  30.  
  31. int main(){
  32. memset(q,-1,sizeof(q));
  33. np=0;
  34. for(int i=2;i<=M;++i){
  35. if(q[i]<0){
  36. p[np]=i;
  37. for(int j=i;j<=M;j+=i)q[j]=np;
  38. np++;
  39. }
  40. }
  41. st_init();
  42. f[1]=1;
  43. for(int i=2;i<=M;++i){
  44. int k=i;
  45. int l=-1;
  46. while(k>1){
  47. if(l>=0&&l!=q[k]){
  48. pst=l;vst=w[l]+1;
  49. st_upd(1,0,np);
  50. }
  51. w[q[k]]++;
  52. l=q[k];
  53. k/=p[q[k]];
  54. }
  55. pst=l;vst=w[l]+1;
  56. st_upd(1,0,np);
  57. f[i]=st[1];
  58. }
  59. int k,n;
  60. while(scanf("%d%d",&n,&k)!=EOF){
  61. printf("%lld\n",((ll)f[n]+MOD-f[k])%MOD);
  62. }
  63. return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement