您的位置:首页 > 其它

2017百度之星初赛(A) 1001 小C的倍数问题(余数定理)

2017-08-13 00:49 197 查看
【题目链接】HDU-6108

【题意】

       给定进制P,求有多少个B满足P进制下,一个正整数是B的倍数的充分必要条件是每一位加起来的和是B的倍数。

【分析】


       假设有一个数s,按位记为abcd,在p进制下,可以转换为 s = a*p^3+b*p^2+c*p^1+d,分离出a+b+c+d,得s = a*(p^3-1)+b*(p^2-1)+c*(p^1-1)+a+b+c+d。


       根据余数定理,我们可以知道,(p^3-1)、(p^2-1)、(p^1-1)都可以被(p-1)整除,a*(p^3-1)+b*(p^2-1)+c*(p^1-1)是(p-1)的整数倍。因此,只要满足a+b+c+d也为(p-1)的整数倍,s就是(p-1)的整数倍,也就是所有(p-1)的因子的整数倍。


       这道题输出p-1的因子个数即可。


>余数定理     一个多项式f(x) 除以一线性多项式(x-a)的余式是 f(a)。

f(x)=x^n-1,f(x)/(x-1)的余式为f(1)=0,因此x^n-1都能被x-1分解。

附:利用余数定理进行因式分解

【代码】

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main(){
int T,p,ans;
scanf("%d",&T);
while(T--){
scanf("%d",&p);
ans=0;
for(int i=1;i*i<=p-1;i++){
if((p-1)%i==0){
if(i*i==p-1)
ans++;
else
ans+=2;
}
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: