您的位置:首页 > 其它

hdu 6108 小C的倍数问题(同余定理)

2017-08-14 08:50 211 查看

小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);
d2ef
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: