Problem:
Score : 600 points

Problem Statement

Given is a positive integer N.

We will choose an integer K between 2 and N (inclusive), then we will repeat the operation below until N becomes less than K.

Operation: if K divides N, replace N with N/K; otherwise, replace N with N-K.

In how many choices of K will N become 1 in the end?

Constraints

2 \leq N \leq 10^{12}

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

Print the number of choices of K in which N becomes 1 in the end.

Sample Input 1

6

Sample Output 1

3

There are three choices of K in which N becomes 1 in the end: 2, 5, and 6.

In each of these choices, N will change as follows:

When K=2: 6 \to 3 \to 1

When K=5: 6 \to 1

When K=6: 6 \to 1

Sample Input 2

3141

Sample Output 2

13

Sample Input 3

314159265358

Sample Output 3

9

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <set>
#include <vector>
#include <map>
#include <cstdio>
#include <utility>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <cassert>
#include <climits>
#include <numeric>
#include <sstream>
using namespace std;
typedef long long ll;
#define DEBUG
#ifdef DEBUG
	#define debug printf
#else
	#define debug(...)
#endif
const int maxn = 2e5 + 500;
int main(int argc, char const *argv[])
{
	ll n;
	scanf("%lld",&n);
	vector<ll> a,b;
	for(ll i = 2;i * i <= n; ++i)
	{
		if(n % i == 0)
		{
			a.push_back(i);
			if(n != i * i)
			{
				a.push_back(n / i);
			}
		}
	}
	a.push_back(n);
	ll m = n;
	--n;
	for(ll i = 2;i * i <= n; ++i)
	{
		if(n % i == 0)
		{
			b.push_back(i);
			if(n != i * i)
			{
				b.push_back(n / i);
			}
		}
	}
	b.push_back(n);
	n = m;
	ll cnt = 0;
	for(int i = 0;i < b.size(); ++i)
	{
		if(n % b[i] != 0)
		{
			++cnt;
		}
	}
	for(int i = 0;i < a.size(); ++i)
	{
		ll tmp = n;
		while(tmp % a[i] == 0)
		{
			tmp /= a[i];
		}
		if(tmp % a[i] == 1)
		{
			++cnt;
		}
	}
	cout<<cnt<<endl;
	return 0;
}