标签:
Description
Input
Output
Sample Input
Sample Output
一个数的因子和是一个积性函数
关于积性函数,即F(ab)=F(a)*F(b),在数论里有很多积性函数
来证明一下:
S(x)表示x的因子和。
如果x可以分成a,b(一定为素数),那么S(x)=S(a)*S(b)。
为什么一定要分成素数呢,因为一个素数的因子之后1和它本身,对于a,b 来说,就是1,a,1,b,那么x=a*b,x的因子只有1,a,,b,x这四个数,
(1+a)*(1+b)=1+a+b+a*b。看明白了么,这就是所谓的一个数的因子和是一个积性函数。
(a*b)/c %M= a%M * b%M * inv(c)
其中inv(c)即满足 (c*inv(c))%M=1的最小整数
a^(b)%c----->a(b%k(c)+k(c))%c (b>=k(c)) 其中k(c)为c的欧拉值。
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> using namespace std; typedef long long LL; LL qpow(int x,int y){ LL b = 1; for(;y;y>>=1){ if(y&1) b = (b*x)%29; x=(x*x)%29; }b--; return b<0?b+29:b; } int main() { int x; while(~scanf("%d",&x)&&x){ LL a = 2*x+1;if(a>28) a%=28,a+=28; LL b = x+1;if(b>28) b%=28,b+=28; printf("%d\n",qpow(2,a)*qpow(3,b)*qpow(22,b)*9%29); } return 0; }
HDU 1452 FZU 1053 Happy 2004(逆元函数+因子和函数+大指数取模化简公式)
标签:
原文地址:http://www.cnblogs.com/BugClearlove/p/4705255.html