题目大意:
给你一个数p(2 < p <1e9),问你有多少数 x 满足:对于任意一个数,“它能被 x 整除”的充要条件是“把它化成 p 进制的数之后,把各个位的数相加也能被 x整除”。
分析:
思路大概就是对于给定的整数 p , p-1 的因子个数就是满足条件的 x 的个数。因为对于一个数 n ,可以把它写成:
n=a0+a1∗p+a2∗p2+a3∗p3+...+ak∗pk
的形式。
那么,对于 p 来说,如果
p≡1(modx)
那么,
n≡a0+a1∗p+a2∗p2+a3∗p3+...+ak∗pk≡a0+a1+a2+...+ak(modx)
。
所以问题就转换成了:求有多少个 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);
}
}