HDU 6108.小C的倍数问题 (2017"百度之星"程序设计大赛

补完题?不存在的。

这么久了,还是一条咸鱼,看一堆乱七八糟的东西,写一堆没用的水题,一点进步都没有,还是那么菜,菜的掉渣。

这个百毒之星初赛A还会写两道最简单的水题,初赛B一点也不会,菜的难过。。。

最近看的dp和kmp,垂死挣扎,一点一点看吧。。。

cf打的还是那么弱,一点进步都没有。。。

好久没写博客了,最近写的都是水题,都没有写博客的必要,但是还是来水一水(;´д`)ゞ,要不就没有写博客的习惯了。

吐槽百毒之星,比赛的时候1005交上去,莫名其妙Output Limit Exceeded,然而晚上在杭电一点没改的又重新交了一次,过了?!过了,了。。。

1001:小C的倍数问题

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 32768/32768 K (Java/Others)
 

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
 
 

题意一开始怎么都没看懂,不知道是我的脑回路和出题人不一样,还是因为我语文不好。。。还是大佬给我说的题意才理解的。

就是找1到p-1的因数的个数,比如10进制,就是0,1,2,3,4,5,6,7,8,9,哎呀,就是那个意思,想想就理解了。。。

 

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int main(){
 5     ll t,n,sum;
 6     scanf("%lld",&t);
 7     while(t--){
 8         scanf("%lld",&n);
 9         sum=0;n--;
10         for(ll i=1;i<=(ll)sqrt(n);i++){
11             if(n%i==0&&n/i==i)sum++;
12             else if(n%i==0&&n/i!=i)sum+=2;
13         }
14         printf("%lld
",sum);
15     }
16     return 0;
17 }
 
    
 
 
原文地址:https://www.cnblogs.com/ZERO-/p/7354176.html