Guest User

Untitled

a guest
May 26th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <cstdio>
  5. #include <string>
  6. #include <stack>
  7. using namespace std;
  8.  
  9. #define sz size()
  10. #define all(x) (x).begin(),(x).end()
  11. #define pb push_back
  12. #define mp make_pair
  13. #define X first
  14. #define Y second
  15. #define abs(x) ((x) >= 0) ? (x) : -(x)
  16. #define sqr(x) (x)*(x)
  17.  
  18. using namespace std;
  19.  
  20. vector<int> divisors(100001010, 0);
  21. vector<int> ans(10000101, -1);
  22. vector<int> primes;
  23.  
  24. void sieve() {
  25. vector<bool> u(20000, false);
  26. for(int i = 2; i < u.sz; i++) {
  27. if(!u[i]) {
  28. for(int j = i * i; j < u.sz; j += i) {
  29. u[j] = true;
  30. }
  31. primes.pb(i);
  32. }
  33. }
  34. }
  35.  
  36. int fact(int n) {
  37. for(int i = 0;i < primes.sz && sqr(primes[i]) <= n; i++ ){
  38. if(n % primes[i] == 0 ) {
  39. return divisors[n/primes[i]] + 1;
  40. }
  41. }
  42. return 1;
  43. }
  44.  
  45. void init() {
  46. sieve();
  47. int d, t = 0;
  48. for(int i = 2;;i++) {
  49. d = fact(i);
  50. t += d;
  51. ans[t] = i;
  52. if(t >= 10000101) break;
  53. divisors[i] = d;
  54. //printf("%d %d\n", i, t);
  55. }
  56. }
  57.  
  58. int main(){
  59. init();
  60. int t;
  61. for(int i = 1;scanf("%d", &t) && t != -1;i++) {
  62. if(ans[t] == -1) {
  63. printf("Case %d: Not possible.\n",i);
  64. }
  65. else {
  66. printf("Case %d: %d!\n",i, ans[t]);
  67. }
  68. }
  69. return 0;
  70. }
Add Comment
Please, Sign In to add comment