1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #include <iostream> int main(void) { typedef unsigned long long ulong; ulong num = 17022805693386603001ULL; if (num<2) return 0; ulong workingNum=num; // Factor out factors of 2 while (workingNum%2==0) { std::cout << "2 "; workingNum/=2; } // Factor out factors of 3 while (workingNum%3==0) { std::cout << "3 "; workingNum/=3; } if (workingNum==1) return 0; // Factor out factors >=5 ulong nextOffset=2; char nextShift = 1; ulong n = 5; ulong nn = 25; do { // Is workingNum divisible by n? if (workingNum%n==0) { // n is a factor! // so is the number multiplied by n to get workingNum // Insert n into the list of factors std::cout << n << ' '; // Divide working number by n workingNum/=n; // Test for done... if (workingNum==1) return 0; // Try n again } else { nn += n << (nextShift+1) + 1<<(nextShift*2); // (n+b)^2 = n^2 + 2*n*b + b*2 n += nextOffset; nextOffset ^= 6; nextShift ^= 3; // invariant: nn == n*n if (n & 0x100000000LL) break; // careful of integer wraparound in n^2 } } while (nn <= workingNum); // workingNum is prime, add it to the list of factors std::cout << workingNum << std::endl; return 0; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IG1haW4odm9pZCkKewogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsb25nOwogIHVsb25nIG51bSA9IDE3MDIyODA1NjkzMzg2NjAzMDAxVUxMOwoKICBpZiAobnVtPDIpCiAgICByZXR1cm4gMDsKCiAgdWxvbmcgd29ya2luZ051bT1udW07CgogIC8vIEZhY3RvciBvdXQgZmFjdG9ycyBvZiAyCiAgd2hpbGUgKHdvcmtpbmdOdW0lMj09MCkKICB7CiAgICBzdGQ6OmNvdXQgPDwgIjIgIjsKICAgIHdvcmtpbmdOdW0vPTI7CiAgfQoKICAvLyBGYWN0b3Igb3V0IGZhY3RvcnMgb2YgMwogIHdoaWxlICh3b3JraW5nTnVtJTM9PTApCiAgewogICAgc3RkOjpjb3V0IDw8ICIzICI7CiAgICB3b3JraW5nTnVtLz0zOwogIH0KCiAgaWYgKHdvcmtpbmdOdW09PTEpCiAgICByZXR1cm4gMDsKCiAgLy8gRmFjdG9yIG91dCBmYWN0b3JzID49NQogIHVsb25nIG5leHRPZmZzZXQ9MjsKICBjaGFyIG5leHRTaGlmdCA9IDE7CiAgdWxvbmcgbiA9IDU7CiAgdWxvbmcgbm4gPSAyNTsKICBkbyB7CiAgICAvLyBJcyB3b3JraW5nTnVtIGRpdmlzaWJsZSBieSBuPwogICAgaWYgKHdvcmtpbmdOdW0lbj09MCkKICAgIHsKICAgICAgLy8gbiBpcyBhIGZhY3RvciEKICAgICAgLy8gc28gaXMgdGhlIG51bWJlciBtdWx0aXBsaWVkIGJ5IG4gdG8gZ2V0IHdvcmtpbmdOdW0KCiAgICAgIC8vIEluc2VydCBuIGludG8gdGhlIGxpc3Qgb2YgZmFjdG9ycwogICAgICBzdGQ6OmNvdXQgPDwgbiA8PCAnICc7CgogICAgICAvLyBEaXZpZGUgd29ya2luZyBudW1iZXIgYnkgbgogICAgICB3b3JraW5nTnVtLz1uOwoKICAgICAgLy8gVGVzdCBmb3IgZG9uZS4uLgogICAgICBpZiAod29ya2luZ051bT09MSkKICAgICAgICByZXR1cm4gMDsKCiAgICAgIC8vIFRyeSBuIGFnYWluCiAgICB9ICAKICAgIGVsc2UgewogICAgICBubiArPSBuIDw8IChuZXh0U2hpZnQrMSkgKyAxPDwobmV4dFNoaWZ0KjIpOyAvLyAobitiKV4yID0gbl4yICsgMipuKmIgKyBiKjIKICAgICAgbiArPSBuZXh0T2Zmc2V0OwogICAgICBuZXh0T2Zmc2V0IF49IDY7CiAgICAgIG5leHRTaGlmdCBePSAzOwogICAgICAvLyBpbnZhcmlhbnQ6IG5uID09IG4qbgogICAgICBpZiAobiAmIDB4MTAwMDAwMDAwTEwpIGJyZWFrOyAvLyBjYXJlZnVsIG9mIGludGVnZXIgd3JhcGFyb3VuZCBpbiBuXjIKICAgIH0KICB9IHdoaWxlIChubiA8PSB3b3JraW5nTnVtKTsKCiAgLy8gd29ya2luZ051bSBpcyBwcmltZSwgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIGZhY3RvcnMgICAgICAgIAogIHN0ZDo6Y291dCA8PCB3b3JraW5nTnVtIDw8IHN0ZDo6ZW5kbDsKICByZXR1cm4gMDsKfQ==
prog.cpp: In function ‘int main()’: prog.cpp:55: warning: suggest parentheses around + or - inside shift
-
upload with new input
-
result: Success time: 0s memory: 2724 kB returned value: 0
241 251 65521 4294967291


