hdu 1425 Happy 2004

题目链接

hdu 1425 Happy 2004

题解

题目大意:

\[\sum_{d|2004^{x}}d\ mod\ 29\]
记为\(s(2004^x)\)
\(sum(2004^{x})= s(2^2X)) * s(3^X) * s(167^X)\)
$167?mod?29 = 22 $
\(s(2004^X) = s(2^{2X}) * s(3^{X})) * s(22^X)\)
此时底数变为了质数
如果p是素数
\(s(p^n)=1+p+p^2+...+p^n= (p^{n+1}-1) / (p-1) (1)\)
上面的式子带下来,写代码就好了
对于除法取mod需要求逆元
29为素数->快速幂
或者,打个表不就好了嘛233

代码

#include<cmath>
#include<cstdio>
#include<algorithm>
inline int read() {
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar();
    return x;
}
#define mod 29
int x,a,b,c;
int pow(int a,int p) {
    int ret=1;
    for(;p;p>>=1,a=a*a%mod) {
        if(p&1)ret=ret*a%mod;
    }
    return ret;
}
int main() {
    while(1) {
        x=read();
        if(!x)break;
        a=pow(2,2*x+1);
        b=pow(3,x+1);
        c=pow(22,x+1);
        printf("%d\n",(a-1)*(b-1)*15*(c-1)*18%mod);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/sssy/p/8439400.html

时间: 2024-10-23 13:18:47

hdu 1425 Happy 2004的相关文章

HDU 1425 sort 题解

选择出数列中前k个最大的数. 这里因为数据特殊,所以可以使用hash表的方法: #include <cstdio> #include <algorithm> #include <stdlib.h> #include <limits> using namespace std; const int SIZE = 1000005; const int SMALL = -500000; bool arr[SIZE]; int main() { int n, m, a

HDU 1452 Happy 2004(因子和的积性函数)

题目链接 题意 : 给你一个X,让你求出2004的X次方的所有因子之和,然后对29取余. 思路 : 原来这就是积性函数,点这里这里这里,这里讲得很详细. 在非数论的领域,积性函数指所有对于任何a,b都有性质f(ab)=f(a)f(b)的函数. 在数论中的积性函数:对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数. 若对于某积性函数 f(n),就算a, b不互质,也有f(ab)=f(a)f(b),则称它为完全积性的. s(

hdu 1452 Happy 2004 膜拜这推导过程

Happy 2004 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 920    Accepted Submission(s): 648 Problem Description Consider a positive integer X,and let S be the sum of all positive integer divis

E题hdu 1425 sort

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 sort Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 33461    Accepted Submission(s): 9968 Problem Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Inpu

HDU 1452 Happy 2004 数论

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1452 题目描述: 让你求2004^x的所有因数之和, 模29 解题思路: 先将2014质因数分解, 2^2 * 3 * 167, 所以所有因数的个数就是(2x+1)*(x+1)*(x+1) , 我们列出公式, 相当于一个空间直角坐标系, 我们先将x, y平面上的点相加, 再加z轴上的, 最后得出公式 ans = (3^(x+1)-1) * (167^(x+1)-1)*(2^(2*x+1)-1)/3

HDU 1452 Happy 2004(唯一分解定理)

题目链接:传送门 题意: 求2004^x的所有约数的和. 分析: 由唯一分解定理可知 x=p1^a1*p2^a2*...*pn^an 那么其约数和 sum = (p1^0+p1^1^-+p1^a1)*-* (pn^0+pn^1^-+pn ) 代码如下: #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; const

HDU 1452 Happy 2004

题目意思:求2004^x的所有正因数的和对29求余 解析: 我们用s(x)表示x的因子和: 2的因子为1,2,s(2)=3; 3的因子为1,3,s(3)=4; 6的因子为1,2,3,6,s(6)=12; 可以发现:s(6)=s(2)*s(3)=3*4=12; 4的因子为1,2,4,,s(4)=7; 5的因子为1,5,s(5)=6; 20的因子为1,2,4,5,10,20,s(20)=42: 可以发现:s(20)=s(4)*s(5)=7*6=42; s(25)=1+5+25=31 再看s(50)=

hdu 1452 Happy 2004 (快速幂+取模乘法逆元)

Problem Description Consider a positive integer X,and let S be the sum of all positive integer divisors of 2004^X. Your job is to determine S modulo 29 (the rest of the division of S by 29).Take X = 1 for an example. The positive integer divisors of

快速排序——HDU 1425

对应HDU 题目:点击打开链接 sort Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u [Submit]   [Go Back]   [Status] Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的