Advertisement
a53

Nr_Div_Huge

a53
May 27th, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. #include <fstream>
  2. #include<bitset>
  3. using namespace std;
  4. ifstream f("nr_div_huge.in");
  5. ofstream g("nr_div_huge.out");
  6. int q,n,k,p,t;
  7.  
  8. long long m=1000000007;
  9. void ciur(int p,int v[]) ///nr prime<100000
  10. {bitset<31700>a=0;
  11. for(int d=2;d<=p;d++)
  12. if(!a[d])
  13. {
  14. v[++t]=d;
  15. for(int i=d*d;i<=p;i=i+d) a[i]=1;
  16. }
  17. }
  18.  
  19. long long nrdiv(int x,int v[])
  20. {
  21. long long sol=1,z=1,w=0;
  22. while(v[z]*v[z]<=x)
  23. {
  24. if(x%v[z]==0)
  25. {
  26. while(x%v[z]==0) w++,x/=v[z];
  27. if(z==1) w--;
  28. sol=sol*(w+1);
  29. w=0;
  30. }
  31. z++;
  32. }
  33. if(x>1) sol=sol*2;
  34. return sol;
  35. }
  36.  
  37. long long nrdivn(int x, int n,int v[])
  38. {
  39. long long sol=1,z=1,w=0;
  40. while(v[z]*v[z]<=x)
  41. {
  42. if(x%v[z]==0)
  43. {
  44. while(x%v[z]==0) w++,x/=v[z];
  45. w=w*n;
  46. if(z==1) w--;
  47. sol=sol*(w+1)%m;//********mod
  48. w=0;
  49. }
  50. z++;
  51. }
  52. if(x>1) sol=sol*(n+1)%m; /// *************mod
  53. return sol;
  54. }
  55.  
  56. long long ans(int n, int k,int v[])
  57. {
  58. long long t1=nrdivn(k,n+1,v);
  59. long long t2=nrdiv(k+1,v);
  60. return t1*t2%m; /// *********mod
  61. }
  62.  
  63. int main()
  64. {
  65. int v[3410];
  66. p=31700; /// 3410 nr prime
  67. ciur(p,v);
  68. f>>q;
  69. for(int i=1;i<=q;++i)
  70. {
  71. f>>n>>k;
  72. g<<ans(n,k,v)<<'\n';
  73. }
  74. g.close();
  75. return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement