Submission #495773


Source Code Expand

#include <cassert>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>

#define all(x) begin(x),end(x)
#define REP(i,b,n) for(int i=static_cast<int>(b);i<static_cast<int>(n);++i)
#define rep(i,n) REP(i,0,n)
#define repsz(i,v) rep(i,(v).size())
using namespace std;

using Int = long long;
Int gcd(Int a, Int b){//{{{
    while(b) swap(a %= b, b);
    return a;
}//}}}
Int lcm(Int a, Int b){ return a / gcd(a, b) * b; }
Int powmod(Int b, Int e, Int m){//{{{
    Int res = 1;
    for(b %= m; e; e >>= 1, (b *= b) %= m) if(e&1) (res *= b) %= m;
    return res;
}//}}}
vector<Int> prime_factorization(Int n){//{{{
    vector<Int> res;
    for(Int p = 2; p <= n; ++p){
        if(p * p > n) p = n;
        for(; n % p == 0; n /= p) res.emplace_back(p);
    }
    return res;
}//}}}
vector<Int> divisiors(Int n){//{{{
    vector<Int> res;
    auto ps = prime_factorization(n);
    set<Int> pq; pq.emplace(1);
    while(!pq.empty()){
        auto m = *begin(pq); pq.erase(m);
        res.emplace_back(m);
        for(auto &p : ps) if(n % (m * p) == 0) pq.emplace(m * p);
    }
    return res;
}//}}}
Int lambda(Int n){//{{{
    Int res = 1;
    if(n % 8 == 0) n >>= 1;
    for(Int p = 2; p <= n; ++p){
        if(p * p > n) p = n;
        if(n % p != 0) continue;
        Int now = p-1;
        for(n /= p; n % p == 0; n /= p) now *= p;
        res = lcm(res, now);
    }
    return res;
}//}}}
Int ord(const Int &n, const Int &m){//{{{
    if(gcd(n, m) != 1) return 0;
    for(auto &d : divisiors(lambda(m))) if(powmod(n, d, m) == 1 % m) return d;
    assert(false);
    return 0;
}//}}}

int main(){//{{{
    Int n; cin >> n;
    auto ps = prime_factorization(n);
    Int res = 1;
    if(adjacent_find(begin(ps), end(ps)) != end(ps)) res = -1;
    else for(auto &p : ps) if(res) res = lcm(res, ord(n, p-1));
    cout << (res ? res : -1) << endl;
    return 0;
}//}}}
// vim:set foldmethod=marker commentstring=//%s:

Submission Info

Submission Time
Task D - Identity Function
User MiSawa
Language C++11 (GCC 4.8.1)
Score 100
Code Size 2002 Byte
Status AC
Exec Time 37 ms
Memory 1040 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 83
Set Name Test Cases
All 00_sample_00, 00_sample_01, 00_sample_02, 20_mini_00, 20_mini_01, 20_mini_02, 20_mini_03, 20_mini_04, 20_mini_05, 20_mini_06, 20_mini_07, 20_mini_08, 20_mini_09, 20_mini_10, 20_mini_11, 20_mini_12, 20_mini_13, 20_mini_14, 20_mini_15, 20_mini_16, 20_mini_17, 20_mini_18, 20_mini_19, 30_square_00, 30_square_01, 30_square_02, 30_square_03, 30_square_04, 30_square_05, 30_square_06, 30_square_07, 30_square_08, 30_square_09, 30_square_10, 30_square_11, 30_square_12, 30_square_13, 30_square_14, 30_square_15, 30_square_16, 30_square_17, 30_square_18, 30_square_19, 40_maxrandom_00, 40_maxrandom_01, 40_maxrandom_02, 40_maxrandom_03, 40_maxrandom_04, 40_maxrandom_05, 40_maxrandom_06, 40_maxrandom_07, 40_maxrandom_08, 40_maxrandom_09, 40_maxrandom_10, 40_maxrandom_11, 40_maxrandom_12, 40_maxrandom_13, 40_maxrandom_14, 40_maxrandom_15, 40_maxrandom_16, 40_maxrandom_17, 40_maxrandom_18, 40_maxrandom_19, 50_impossible_00, 50_impossible_01, 50_impossible_02, 50_impossible_03, 50_impossible_04, 50_impossible_05, 50_impossible_06, 50_impossible_07, 50_impossible_08, 50_impossible_09, 60_biganswer_00, 60_biganswer_01, 60_biganswer_02, 60_biganswer_03, 60_biganswer_04, 60_biganswer_05, 60_biganswer_06, 60_biganswer_07, 60_biganswer_08, 60_biganswer_09
Case Name Status Exec Time Memory
00_sample_00 AC 37 ms 860 KB
00_sample_01 AC 33 ms 976 KB
00_sample_02 AC 32 ms 864 KB
20_mini_00 AC 31 ms 904 KB
20_mini_01 AC 33 ms 844 KB
20_mini_02 AC 34 ms 964 KB
20_mini_03 AC 33 ms 872 KB
20_mini_04 AC 32 ms 920 KB
20_mini_05 AC 33 ms 980 KB
20_mini_06 AC 33 ms 1040 KB
20_mini_07 AC 31 ms 912 KB
20_mini_08 AC 33 ms 976 KB
20_mini_09 AC 34 ms 848 KB
20_mini_10 AC 32 ms 856 KB
20_mini_11 AC 33 ms 852 KB
20_mini_12 AC 31 ms 908 KB
20_mini_13 AC 33 ms 848 KB
20_mini_14 AC 33 ms 984 KB
20_mini_15 AC 31 ms 916 KB
20_mini_16 AC 33 ms 852 KB
20_mini_17 AC 33 ms 980 KB
20_mini_18 AC 33 ms 992 KB
20_mini_19 AC 33 ms 976 KB
30_square_00 AC 35 ms 980 KB
30_square_01 AC 35 ms 940 KB
30_square_02 AC 33 ms 844 KB
30_square_03 AC 34 ms 984 KB
30_square_04 AC 34 ms 976 KB
30_square_05 AC 34 ms 844 KB
30_square_06 AC 34 ms 844 KB
30_square_07 AC 34 ms 976 KB
30_square_08 AC 33 ms 980 KB
30_square_09 AC 30 ms 976 KB
30_square_10 AC 33 ms 1028 KB
30_square_11 AC 30 ms 980 KB
30_square_12 AC 32 ms 852 KB
30_square_13 AC 33 ms 976 KB
30_square_14 AC 31 ms 856 KB
30_square_15 AC 33 ms 972 KB
30_square_16 AC 31 ms 848 KB
30_square_17 AC 35 ms 884 KB
30_square_18 AC 33 ms 840 KB
30_square_19 AC 34 ms 848 KB
40_maxrandom_00 AC 33 ms 872 KB
40_maxrandom_01 AC 33 ms 976 KB
40_maxrandom_02 AC 34 ms 920 KB
40_maxrandom_03 AC 33 ms 920 KB
40_maxrandom_04 AC 33 ms 984 KB
40_maxrandom_05 AC 33 ms 976 KB
40_maxrandom_06 AC 33 ms 924 KB
40_maxrandom_07 AC 32 ms 868 KB
40_maxrandom_08 AC 34 ms 848 KB
40_maxrandom_09 AC 34 ms 988 KB
40_maxrandom_10 AC 33 ms 984 KB
40_maxrandom_11 AC 33 ms 980 KB
40_maxrandom_12 AC 33 ms 876 KB
40_maxrandom_13 AC 34 ms 856 KB
40_maxrandom_14 AC 31 ms 956 KB
40_maxrandom_15 AC 32 ms 892 KB
40_maxrandom_16 AC 32 ms 852 KB
40_maxrandom_17 AC 34 ms 1028 KB
40_maxrandom_18 AC 35 ms 980 KB
40_maxrandom_19 AC 33 ms 852 KB
50_impossible_00 AC 35 ms 868 KB
50_impossible_01 AC 33 ms 980 KB
50_impossible_02 AC 33 ms 984 KB
50_impossible_03 AC 35 ms 916 KB
50_impossible_04 AC 36 ms 932 KB
50_impossible_05 AC 33 ms 872 KB
50_impossible_06 AC 35 ms 988 KB
50_impossible_07 AC 33 ms 972 KB
50_impossible_08 AC 35 ms 988 KB
50_impossible_09 AC 33 ms 848 KB
60_biganswer_00 AC 35 ms 876 KB
60_biganswer_01 AC 33 ms 856 KB
60_biganswer_02 AC 32 ms 852 KB
60_biganswer_03 AC 32 ms 876 KB
60_biganswer_04 AC 34 ms 968 KB
60_biganswer_05 AC 35 ms 872 KB
60_biganswer_06 AC 34 ms 972 KB
60_biganswer_07 AC 33 ms 852 KB
60_biganswer_08 AC 34 ms 980 KB
60_biganswer_09 AC 34 ms 980 KB