HDU4152-Happy 2004-积性函数和快速幂乘

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1452

本题主要是积性函数和快速幂乘的运用。

下面主要介绍一下积性函数:

积性函数是描述因子和的一种关系:

6的因子是1,2,3,6;   6的因子和是 s(6)=1+2+3+6=12;

20的因子是1,2,4,5,10,20;   20的因子和是 s(20)=1+2+4+5+10+20=42;

2的因子是1,2; 2的因子和是 s(2)=1+2=3;

3的因子是1,3; 3的因子和是 s(3)=1+3=4;

4的因子和是 s(4)=1+2+4=7;

5的因子和是 s(5)=1+5=6;

s(6)=s(2)*s(3)=3*4=12;

s(20)=s(4)*s(5)=7*6=42;

再看 s(50)= 1+2+5+10+25+50=93=3*31=s(2)*s(25),s(25)=1+5+25=31.

这在数论中叫积性函数。

当gcd(a,b)=1时 s(a*b)=s(a)*s(b)

如果p是素数

s(p^n)=1+p+p^2+...+p^n= (p^(n+1)-1) /(p-1) (1)

本题要计算的是: s(2004^X) mod 29 ,

2004=2^2 *3 *167

s(2004^X) ) = (s(2^2X))) * (s(3^X))) * (s(167^X)))

167%29=22

s(2004^X) ) = (s(2^2X))) * (s(3^X))) * (s(22^X)))

a=s(2^2X)=(2^(2X+1)-1)% //根据 (1)

b=s(3^X)= (3^(X+1)-1)/2 //根据 (1)

c=s(22^X)= (22^(X+1)-1)/21 //根据 (1)

(a/b) %p= ( a *b^(-1)%p)(2)

b^(-1)是 b的逆元素

1的逆元素是1;

2的逆元素是15,因为2*15=30 % 29=1 % 29=1;

21的逆元素是18 ,因为21*18=378% 29 =1 % 29=1;

因此:

a=(pow(2,2*x+1,29)-1);//根据 (2)

b=(pow(3,x+1,29)-1)*15; //根据 (2)

c=(pow(22,x+1,29)-1)*18 ; //根据 (2)

即:下面计算pow快速幂乘的值。

int pow(int a,int b)

{

int sum=1;

while(b)

{

if(b&1)

sum=sum*a%29;

b>>=1;

a=a*a%29;

}

return sum;

}

附代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int pow(int a,int b)
{
	int sum=1;
	while(b)
	{
		if(b&1)
		  sum=sum*a%29;
		b>>=1;
		a=a*a%29;
	}
	return sum;
}
int main()
{
	int n;
	while(~scanf("%d",&n),n)
	{
		int a,b,c;
		a=(pow(2,2*n+1)-1);
        <span style="white-space:pre">	</span>b=(pow(3,n+1)-1)*15;
       <span style="white-space:pre">		</span>c=(pow(22,n+1)-1)*18;
        <span style="white-space:pre">	</span>printf("%d\n",(((a*b)%29)*c)%29);
	}
	return 0;
 } 

转载请注明出处,否则追究其法律责任!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 20:16:41

HDU4152-Happy 2004-积性函数和快速幂乘的相关文章

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 求2004^n的所有因子和 积性函数应用

题目链接:点击打开链接 百度个题解:点击打开链接 6的因子是1,2,3,6; 6的因子和是 s(6)=1+2+3+6=12; 20的因子是1,2,4,5,10,20; 20的因子和是 s(20)=1+2+4+5+10+20=42; 2的因子是1,2; 2的因子和是 s(2)=1+2=3; 3的因子是1,3; 3的因子和是 s(3)=1+3=4; 4的因子和是 s(4)=1+2+4=7; 5的因子和是 s(5)=1+5=6; s(6)=s(2)*s(3)=3*4=12; s(20)=s(4)*s(

数论及其应用——积性函数问题

在学习快速幂的过程中,我们曾遇到过因子和函数σ(n),曾提及该函数是积性函数,不过当时并没有给出证明.在这篇文章中,我们将针对数论中的积性函数问题,讨论更多的模型. 首先我们先给出一些定义. 定义1:定义在所有正整数上的函数成为算数函数. 定义2:算术函数f如果满足对于任意两个互素的正整数m.n,均由f(mn) = f(m)f(n),就称其为积性函数.如果对于任意的m.n满足上述性质,则称其为完全积性函数. 下面我们基于此来讨论欧拉函数φ(n). 首先,该函数的含义表示不超过n且与n互素的正整数

积性函数筛法

积性函数筛法 很多常用的数论函数都是积性函数,而在题目中,我们常常需要线性(甚至更高)的筛法. 对于积性函数,我们可以在筛素数的基础上稍加修改,即可完成线性筛. 首先,注意到积性函数的特点: \[ f(xy)=f(x)\times f(y) \] 而可以线性筛的积性函数,需要知道以下两个式子的快速求法: \[ f(p)=?\quad f(p^k)=?\\p\in prime \] 其中, \(f(p)\) 大多是直接定义,\(f(p^k)\) 大多是递归定义. 我们来回忆一下素数筛的过程: in

积性函数求和:筛法DP、洲阁筛

如果定义在正整数集上的函数 $f(n)$ 满足对于任意一对互素正整数 $n, m$ 都有 $f(n)f(m)=f(nm)$, 那么 $f$ 就叫做积性函数. 积性函数又可以表示为,假设 $n$ 的素因子分解式为 $n=\prod_{i=1}^mp_i^{c_i}$, 那么 $f(n)=\prod_{i=1}^mg(p_i, c_i)$. 本文讨论的函数满足:$g(p, c)$ 能够快速求单点值,且 $g(x, 1)$ 是关于 $x$ 的低次多项式. 积性函数求和,就是要求出 $\sum_{n=1

浅谈一类积性函数的前缀和(转载)

本文转自:http://blog.csdn.net/skywalkert/article/details/50500009 另外,莫比乌斯反演和杜教筛其他可转到 http://blog.leanote.com/post/totziens/%E8%8E%AB%E6%AF%94%E4%B9%8C%E6%96%AF%E5%8F%8D%E6%BC%94 写在前面 笔者在刷题过程中遇到一些求积性函数前缀和的问题,其中有一类问题需要在低于线性时间复杂度的算法,今天就来浅析一下这类问题的求解方法,当作以后讲课

HDU2879 HeHe 数论积性函数

题目名字有点搓,做题时没做出来,学长他们做出了,发现跟网上题解的思路没太大区别,网上所有题解的分析也都转自同一个地方,看样子这道题目不是那么好想的,没办法按照解析画了半天,计算器按了半天,理解了,自己敲出来了,觉得值得留念,打算再刷几道这样的 转自:http://blog.csdn.net/kksleric/article/details/8096914 定义:对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数.若对于某积

POJ2480 Longge&#39;s problem 欧拉函数的应用 &amp;&amp; 积性函数

题意很简单,求sum(gcd(i,n))   1<=i<=n; 这题看到后第一反应并没有里用积性函数的性质,不过也可以做,欣慰的是我反应还是比较快的 设f(n)=gcd(1,n)+gcd(2,n)+....+gcd(n-1,n) + gcd(n,n), 用g(n,i)表示满足 gcd(x,n)=i的 x的个数 (x小于n),则 f(n)=sum{i*g(n,i)}; 同时又利用 扩展欧几里德的性质  gcd(x,n)=i  的充要条件是 gcd(x/i,n/i)==1,所以 满足 x/i的解有

HDU 4002 Find the maximum (欧拉函数-积性函数的性质(2011年大连赛区网络赛第二题)

[题目链接]:click here~~ [题目大意]: 给出一个整数n,求一个数x,x在1到n之间,并且x/φ(x)最大(其中φ(x)为x的欧拉函数). [思路]: 由欧拉函数为积性函数,即:如果 则有: 且: 则有: 要使f(x)最大,须使x含尽量多的不同素数因子. 代码: /* * Problem: HDU No.4002 * Running time: 1700MS * Complier: java * Author: javaherongwei * Create Time: 0:08 2