fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long int ll;
  5.  
  6. const ll MAXN = 1000000;
  7.  
  8. vector<ll> spf(MAXN + 1);
  9.  
  10. void compspf(){
  11. for(int i = 2 ;i <= MAXN ;i++){
  12. spf[i]=i;
  13. }
  14. for(int i = 2 ; i*i <= MAXN ;i++){
  15. if(spf[i] == i){
  16. for(int j = i*i ; j<=MAXN ; j+= i){
  17. if (spf[j] == j) { // Update spf[j] to the smallest prime factor
  18. spf[j] = i;
  19. }
  20. }
  21. }
  22. }
  23. }
  24. unordered_map<int,int>cl(ll vl){
  25. unordered_map<int,int>a2;
  26. while(vl!=1){
  27. ll d = spf[vl]; a2[d]++;
  28. vl = vl/d;
  29. }
  30. return a2;
  31. }
  32. int main() {
  33. int n,m ;
  34. cin>>n>>m;
  35. compspf();
  36. ll md = 1e9+7;
  37. unordered_map<ll,ll>a2;
  38. for(int i = 2 ; i<=m ;i++){
  39. unordered_map<int,int>b1 = cl(i);
  40. for(auto it : b1){
  41. a2[it.first]=a2[it.first]+it.second;
  42. }
  43. }
  44.  
  45. vector<int>b(n);
  46. for(int i = 0;i < n ;i++){
  47. ll g = 1;
  48. cin>>b[i];
  49. unordered_map <ll,ll> b5 = a2;
  50. unordered_map<int,int>b1 = cl(b[i]);
  51. for(auto it : b1){
  52. b5[it.first]=b5[it.first]+it.second;
  53. }
  54. for(auto it : b5){
  55. g = ((g%md)*( (it.second%md + 1%md)%md))%md;
  56. }cout<<g<<endl;
  57. }
  58. }
Success #stdin #stdout 0.01s 11212KB
stdin
3 3
1 2 3
stdout
4
6
6