整数的因子和 ---TOJ 1089 Happy 2004
来源:互联网 发布:手机淘宝聊天记录消失 编辑:程序博客网 时间:2024/06/06 05:47
题意
题目链接:1089. Happy 2004
这个题目就是求出
Input
1
10000
0
Output
6
10
思路
明显暴力解法肯定会超时, 数论问题首先要从整数的标准分解入手:
N=∏ki=1paii 其中pi 是N 的质因子,ai 为其次数。
例如:
有了标准分解, 接着考虑 一个整数的是怎么构成因数的,就是由 质因子及其幂 相互相乘得到的,具体来说就是 我们每次可以取出
∏ki=1(p0i+p1i+…+paii)
这个式子展开之后就是 所有的因子相加了 ,正是我们所求的~
下面就是求解这个式子结果了, 取模的话就直接分配进去按照二分幂 取摸,
不过这里有个技巧:
∃l Al+xmod m=Axmod m 其中l∈[0,m] 成立,
只需要求出循环节
2的幂关于29的循环节是28;
3的幂关于29的循环节是28;
167的幂关于29的循环节是21;
2,3,167的循环节内的和 mod 29 正好为0;
因此只需要求出 循环节剩下的部分即可~
代码
#include <iostream>#include <math.h>#include <stdlib.h>using namespace std;int n;int main(){ while(cin>>n&&n) { long long a=0,b=0,c=0,t=1; for(int i=0; i<(2*n+1)%28;i++) a+=(long long)(pow(2.0,i))%29; for(int i=0;i<(n+1)%28;i++) b+=(long long)(pow(3.0,i))%29; for(int i=0;i<(n+1)%14;i++){// 这里没有直接使用pow 函数,考虑到pow(167,20) 会超范围 c+=t; t*=167; t%=29; } cout<<((a%29)*(b%29)*(c%29))%29<<endl; }}
0 0
- 整数的因子和 ---TOJ 1089 Happy 2004
- HDU 1452 Happy 2004(因子和)
- hdu 1452 Happy 2004 因子和
- HDU 1452 Happy 2004 (因子和)
- HDU 1452 Happy 2004 求2004^n的所有因子和 积性函数应用
- hdu1452 Happy 2004 x^y的因子和 逆元 快速乘法
- hdu1452 Happy 2004(规律+因子和+积性函数)
- 整数的所有因子
- 整数的因子数
- 整数的素数因子
- 大整数的因子
- 整数因子的分解
- 大整数的因子
- hdoj 1452 Happy 2004 所有因子求和
- 1452 Happy 2004 (所有因子求和)
- 整数N的因子个数和N!的因子个数(数学问题)
- HDU-1452 Happy 2004(逆元+因子和+费马定理)
- 1799 大整数的因子
- Eclipse设置Courier New字体
- 黑马程序员_面向对象
- 自动识别OpenCV版本并添加依赖库
- strcpy和memcpy的区别
- 小媛在努力
- 整数的因子和 ---TOJ 1089 Happy 2004
- 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)
- 设计模式六大原则(1):单一职责原则
- 新人学习、svn提交规范。
- 最快速的Android开发环境搭建ADT-Bundle及Hello World
- Oracle的对象类型
- 排序算法之 堆排序 及其时间复杂度和空间复杂度
- Java内存空间的详解
- 剑指Offer --> Question 33