1. 程式人生 > >百度之星初賽(A)——T1

百度之星初賽(A)——T1

printf input acf 一行 while wid 3的倍數 main cli

小C的倍數問題

Problem Description

根據小學數學的知識,我們知道一個正整數x是3的倍數的條件是x每一位加起來的和是3的倍數。反之,如果一個數每一位加起來是3的倍數,則這個數肯定是3的倍數。

現在給定進制P,求有多少個B滿足P進制下,一個正整數是B的倍數的充分必要條件是每一位加起來的和是B的倍數。

Input

第一行一個正整數T表示數據組數(1<=T<=20)。

接下來T行,每行一個正整數P(2 < P < 1e9),表示一組詢問。

Output

對於每組數據輸出一行,每一行一個數表示答案。

Sample Input
1
10
Sample Output
3
————————————————————————————————————————

這道題我們發現要能滿足 正整數是B的倍數的充分必要條件是每一位加起來的和是B的倍數

那麽我們只需要滿足他是(p-1)的倍數就好了 這個和十進制下的3是一樣的

我們只要能湊到(P-1)然後(P-1)+ k =P+(k-1)=1+k-1=k

所以就是他的倍數了

這樣就完美解決問題辣

技術分享
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using
namespace std; int read(){ int ans=0,f=1,c=getchar(); while(c<0||c>9){if(c==0) f=-1; c=getchar();} while(c>=0&&c<=9){ans=ans*10+(c-0); c=getchar();} return ans*f; } int T,n,ans; int main() { T=read(); while(T--){ n=read()-1; ans=0;
for(int i=1;i*i<=n;i++){ if(n%i==0){ if(n/i==i) ans++; else ans+=2; } } printf("%d\n",ans); } return 0; }
View Code

百度之星初賽(A)——T1