题目大意:

给你一个数p(2 < p <1e9),问你有多少数 x 满足:对于任意一个数,“它能被 x 整除”的充要条件是“把它化成 p 进制的数之后,把各个位的数相加也能被 x整除”

分析:

思路大概就是对于给定的整数 p , p-1 的因子个数就是满足条件的 x 的个数。因为对于一个数 n ,可以把它写成: n=a0+a1p+a2p2+a3p3+...+akpk 的形式。
那么,对于 p 来说,如果 p1modx 那么, na0+a1p+a2p2+a3p3+...+akpka0+a1+a2+...+akmodx
所以问题就转换成了:求有多少个 x 满足,n%x=1 。也就是 p-1 的因子个数。

代码:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int t;
    int n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        int num=0;
        n--;
        int i;
        for(i=1;i*i<n;i++)
        {
            if(n%i==0)num++;
        }
        num*=2;
        if(i*i==n)num++;
        printf("%d\n",num);
    }

}