2017百度之星初赛(A)1001 小C的倍数问题(求因子数)
2017-08-15 11:14
225 查看
题目链接:点击打开链接
题目中文,题意不再详述
思路:当p = 10,满足条件的B有1、3、9,可以看出为9的因子,类比可得出其他进制的规律,p进制满足条件的B为p - 1的因子。(数论不好,具体咋证明不知道,自己遇到这种题,基本就是凭经验乱搞......)
求一个数的因子数的方法很多:最暴力的就是枚举,数据范围1e9,此办法排除;求出质因子的分解再去确定因子数,因为要进行素数打表预处理,而1e9太大,此方法也不合适;合适的方法是对枚举进行优化,因为因子是成对存在的,所以大致枚举sqrt(N)次就可以,复杂度由O(1e9)减少到O(1e5)左右。
题目中文,题意不再详述
思路:当p = 10,满足条件的B有1、3、9,可以看出为9的因子,类比可得出其他进制的规律,p进制满足条件的B为p - 1的因子。(数论不好,具体咋证明不知道,自己遇到这种题,基本就是凭经验乱搞......)
求一个数的因子数的方法很多:最暴力的就是枚举,数据范围1e9,此办法排除;求出质因子的分解再去确定因子数,因为要进行素数打表预处理,而1e9太大,此方法也不合适;合适的方法是对枚举进行优化,因为因子是成对存在的,所以大致枚举sqrt(N)次就可以,复杂度由O(1e9)减少到O(1e5)左右。
// 小C的倍数问题.cpp 运行/限制:0ms/1000ms #include <cstdio> #include <cstring> #include <iostream> #include <cmath> using namespace std; int main(){ int t, p, re; scanf("%d", &t); while (t--) { scanf("%d", &p); p -= 1; re = 0; for (int i = 1; i * i <= p; i++) { if (p % i == 0) re++; } re *= 2;//因子成对存在 int s = (int)sqrt(p); if (s * s == p) re--;//能开平方的数,有一对因子sqrt(p),去掉重复的一个 printf("%d\n", re); } return 0; }
相关文章推荐
- 百度之星 2017初赛第一场 1001 小C的倍数问题
- 2017百度之星初赛(A) 1001 小C的倍数问题(基础数论)
- 2017百度之星初赛(A) 1001 小C的倍数问题(余数定理)
- 百度之星2017初赛A轮 1001 小C的倍数问题
- 2017百度之星初赛:A-1001. 小C的倍数问题
- HDU 6108 2017 百度之星 初赛A 1001 小C的倍数问题
- 2017"百度之星"程序设计大赛 - 初赛(A)1001 小C的倍数问题
- HDU 6108 小C的倍数问题 (数论 2017百度之星初赛A第1题)
- 2017"百度之星"程序设计大赛 - 初赛(A)1001 小C的倍数问题(数学问题)
- 2017"百度之星"程序设计大赛 - 初赛(A)-1001.小C的倍数问题(HDU6108) 1005.今夕何夕-蔡勒公式 (HDU6112)
- 【2017"百度之星"程序设计大赛 - 初赛(A)】小C的倍数问题
- 【 2017"百度之星"程序设计大赛 - 初赛(A)1001小C的倍数问题】
- hdu6108 2017"百度之星"初赛(A)1001小C的倍数问题(数学)
- 百度之星初赛-(A) A小C的倍数问题
- 百度之星初赛(A)--小C的倍数问题----余数定理
- 2017"百度之星"程序设计大赛 - 初赛(A):小C的倍数问题
- 2017百度之星初赛B场第一题Chess--简单杨辉三角问题
- Hdu6108 小C的倍数问题(2017"百度之星"程序设计大赛 - 初赛(A))
- 2017"百度之星"程序设计大赛 - 初赛(A)1001——HDU 6108【求因子数】【思维题】
- HDU6108 小C的倍数问题(规律,2017"百度之星"程序设计大赛 - 初赛(A))