【題解】AtCoder ABC161F – Division or Substraction

【題目敘述】https://atcoder.jp/contests/abc161/tasks/abc161_f

#include <iostream>
#include <cmath>
using namespace std;

long long n, ans;

int main() {
    cin >> n;
    long long sq = sqrt(n);
    for (long long i = 2; i <= sq; i++){
        if (n % i == 0){
            long long tmp = n;
            while (tmp % i == 0) tmp /= i;
            if (tmp % i == 1) ans++;
            long long j = n / i;
            if (j == i) continue;
            tmp = n;
            while (tmp % j == 0) tmp /= j;
            if (tmp % j == 1) ans++;
        }
    }
    sq = sqrt(n-1);
    for (int i = 2; i <= sq; i++){
        if ((n-1) % i == 0){
            ans++;
            long long j = (n-1) / i;
            if (j != i) ans++;
        }
    }
    if (n == 2) ans--;
    cout << ans+2 << "\n";
}

分享本文 Share with friends