hdu 6108 小C的倍数问题

小C的倍数问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 277    Accepted Submission(s):
137

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

思路:若是p进制,设一个数为a1a2a3,若a1a2a3%B==0可以表达成(a1*p^2+a2*p+a3)%B==0----------1式

并且按题意,(a1+a2+a3)%B==0---------2式

设p=k*B+x,代入1式,并且与2式比较,待定系数求解得x==1,也就是说p-1=k*B,那么B一定p-1的因子,找到(p-1)所有的因子即是所求。

AC代码:

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<set>
#include<vector>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
vector<int>divisor(int n) {
    vector<int>res;
    for (int i = 1; i*i < n;i++) {
        if (n%i == 0) {
            res.push_back(i);
            if (i != n / i)res.push_back(n / i);
        }
    }
    return res;
}
int p;
int main() {
    int t;
    scanf("%d",&t);
    while (t--) {
        scanf("%d",&p);
        vector<int>vec = divisor(p - 1);
        printf("%d\n",vec.size());
    }
    return 0;
}
时间: 2024-12-26 00:20:04

hdu 6108 小C的倍数问题的相关文章

HDU 6108 小C的倍数问题 数论

小C的倍数问题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6108 Description 根据小学数学的知识,我们知道一个正整数x是3的倍数的条件是x每一位加起来的和是3的倍数.反之,如果一个数每一位加起来是3的倍数,则这个数肯定是3的倍数.现在给定进制P,求有多少个B满足P进制下,一个正整数是B的倍数的充分必要条件是每一位加起来的和是B的倍数. Input 第一行一个正整数T表示数据组数(1<=T<=20).接下来T行,每行一个正整数P(

HDU 6108 小C的倍数问题 【数学】 (2017&quot;百度之星&quot;程序设计大赛 - 初赛(A))

小C的倍数问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 481    Accepted Submission(s): 278 Problem Description 根据小学数学的知识,我们知道一个正整数x是3的倍数的条件是x每一位加起来的和是3的倍数.反之,如果一个数每一位加起来是3的倍数,则这个数肯定是3的倍数. 现在给定进制

【同余】HDU 6108 小C的倍数问题

http://acm.hdu.edu.cn/showproblem.php?pid=6108 [题意] 给定进制P,求有多少个B满足P进制下,一个正整数是B的倍数的充分必要条件是每一位加起来的和是B的倍数. [思路] 当时记起了离散数学课上学过为啥10进制下是3和9(因为10,3,9关于1同余),所以想到答案是n-1的因子个数 [AC] 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #incl

hdu 4521 小明系列问题——小明序列 (间隔至少为d的LIS 两种解法)

先附上资源地址:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2. 假定工厂的电力有限,一次只能供给一个车间使用.也就是说,一个车间开工的时候,其他车间都必须停工

小C的倍数问题

小C的倍数问题 Accepts: 1990 Submissions: 4931 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的倍数的

2017&quot;百度之星&quot;程序设计大赛 - 初赛(A)-1001.小C的倍数问题(HDU6108) 1005.今夕何夕-蔡勒公式 (HDU6112)

补完题?不存在的. 这么久了,还是一条咸鱼,看一堆乱七八糟的东西,写一堆没用的水题,一点进步都没有,还是那么菜,菜的掉渣. 这个百毒之星初赛A还会写两道最简单的水题,初赛B一点也不会,菜的难过... 最近看的dp和kmp,垂死挣扎,一点一点看吧... cf打的还是那么弱,一点进步都没有... 好久没写博客了,最近写的都是水题,都没有写博客的必要,但是还是来水一水(:′д`)ゞ,要不就没有写博客的习惯了. 吐槽百毒之星,比赛的时候1005交上去,莫名其妙Output Limit Exceeded,

百度之星初赛A轮 hdu 6108 6112 6113

hdu 6108 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 int main(){ 6 int t; 7 cin>>t; 8 while(t--){ 9 ll x; 10 scanf("%I64d",&x); 11 ll ans=0; 12 for(int i=1;i*i<=x;i++){ 13 if((x-1)%i==0) { 14 a

HDU 4500 小Q系列故事——屌丝的逆袭

腾讯的题目,一条简单的搜索题目,适合初学者练习代码能力,或者是高手休息脑子的题,呵呵,不需要动脑了,只动手打代码就过了. 不过腾讯这故事有点坏啊,给人透露了两个信息: 1 腾讯不拘一格降人才 2 进入腾讯就可以屌丝逆袭了 腾讯是不是还想说腾讯的mm特别多? 呵呵,出题不忘给自己宣传一下. #include <stdio.h> #include <limits.h> const int MAX_NM = 20; int N, M; int matrix[MAX_NM][MAX_NM]

[SinGuLaRiTy] 百度之星程序设计大赛 初赛 1001 小C的倍数问题

小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 第一