• Source
    1. #include <iostream>
    2. #include <vector>
    3. #include <cmath>
    4. using namespace std;
    5. const int N=1000000;
    6. const int M=100000;
    7. int main()
    8. {
    9. vector<bool> mark(N+8,false);
    10. vector<int> prime;
    11. vector<int> ans(M+10);
    12. for(int i=2;i<=N;++i)
    13. {
    14. if(mark[i]==false)
    15. {
    16. int b=i+i;
    17. while(b<=N)
    18. {
    19. mark[b]=true;
    20. b+=i;
    21. }
    22. }
    23. }
    24. for(int i=2;i<=N;++i)
    25. if(!mark[i])
    26. prime.push_back(i);
    27. mark[1]=true;
    28. for(int i=1;i<=M ; ++i)
    29. {
    30. int x=i*(i+1);
    31. int num=1;
    32. x/=2;
    33. int to=ceil(sqrt(static_cast<double>(x)));
    34. for(int j=0;prime[j]<=to ; ++j)
    35. {
    36. int y=0;
    37. while(x%prime[j]==0)
    38. {
    39. x/=prime[j];
    40. ++y;
    41. }
    42. if(y!=0)
    43. num*=y+1;
    44. }
    45. if( x!=1)
    46. num*=2;
    47. ans[i]=num;
    48. }
    49. int t;
    50. cin>>t;
    51. for(int k=1;k<=t;++k)
    52. {
    53. int n;
    54. cin>>n;
    55. for(int i=1;i<=M;++i)
    56. if(ans[i]>n)
    57. {
    58. cout<< (i*(i+1))/2<<endl;
    59. break;
    60. }
    61. }
    62.  
    63. }