小C的倍数问题
为什么在10进制下,一个数各个数位上的和是3的倍数那么这个数就是3的倍数?
先看两位数ab,
ab%3=0
即
(a∗10+b)%3=0
即
(a∗9+(a+b))%3=0
9%3
肯定是=0的,那么只要
(a+b)%3=0
,这个数就是3的倍数
再来看三位数abc,
abc%3=0
即
(a∗100+b∗10+c)%3=0
即
(a∗99+b∗9+(a+b+c))%3=0
99和9取余3肯定都是等于0的,因此只要
(a+b+c)%3=0
,这个数就是3的倍数
…….
看出规律没,就是说在n进制下,只要n-1取余一个数x等于0,那么只要一个数各个数位上的和是x的倍数,这个数就是x的倍数
所以我们只需要找出n-1的因子个数即可
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
n-=1;
int ans=2;
for(int i=2;i*i<=n;++i)
{
if(n%i==0)
ans+=2;
if(i*i==n)
--ans;
}
printf("%d\n",ans);
}
return 0;
}