Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <cstdio>
- #include <string>
- #include <stack>
- using namespace std;
- #define sz size()
- #define all(x) (x).begin(),(x).end()
- #define pb push_back
- #define mp make_pair
- #define X first
- #define Y second
- #define abs(x) ((x) >= 0) ? (x) : -(x)
- #define sqr(x) (x)*(x)
- using namespace std;
- vector<int> divisors(100001010, 0);
- vector<int> ans(10000101, -1);
- vector<int> primes;
- void sieve() {
- vector<bool> u(20000, false);
- for(int i = 2; i < u.sz; i++) {
- if(!u[i]) {
- for(int j = i * i; j < u.sz; j += i) {
- u[j] = true;
- }
- primes.pb(i);
- }
- }
- }
- int fact(int n) {
- for(int i = 0;i < primes.sz && sqr(primes[i]) <= n; i++ ){
- if(n % primes[i] == 0 ) {
- return divisors[n/primes[i]] + 1;
- }
- }
- return 1;
- }
- void init() {
- sieve();
- int d, t = 0;
- for(int i = 2;;i++) {
- d = fact(i);
- t += d;
- ans[t] = i;
- if(t >= 10000101) break;
- divisors[i] = d;
- //printf("%d %d\n", i, t);
- }
- }
- int main(){
- init();
- int t;
- for(int i = 1;scanf("%d", &t) && t != -1;i++) {
- if(ans[t] == -1) {
- printf("Case %d: Not possible.\n",i);
- }
- else {
- printf("Case %d: %d!\n",i, ans[t]);
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment