Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- long long const p = 1e9 + 7;
- long long gcd(long long a, long long b) {
- if (a == 0)
- return b;
- return gcd(b % a, a);
- }
- long long mul(long long a, long long b, long long p) {
- long long temp = (long double)a * (long double)b / p;
- long long r = a * b - temp * p;
- while (r < 0) r += p;
- if (r >= p)
- r -= p;
- return r;
- }
- long long func(long long x, long long n) {
- return (mul(x, x, n) + 1) % n;
- }
- long long find_divisor(long long n) {
- long long x = 1, y = 1;
- long long divisor = 1;
- long long i = 0, stage = 2;
- while (divisor == 1 || divisor == n) {
- y = func(y, n);
- x = func(func(x, n), n);
- if (i == stage) {
- x = 2 + rand() % (n - 1);
- y = 2 + rand() % (n - 1);
- stage <<= 1;
- }
- divisor = gcd(llabs(x - y), n);
- ++i;
- }
- return divisor;
- }
- int main() {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- long long n;
- cin >> n;
- long long x = find_divisor(n);
- long long y = n / x;
- if (x >= y)
- swap(x, y);
- cout << x << " " << y;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement