hdu1452 Happy 2004

原题:http://acm.hdu.edu.cn/showproblem.php?pid=1452


等比数列求和公式:(之前忘记了。+ =)


奇性函数:

数论中,积性函数是指一个定义域为正整数n 的算术函数f(n),有如下性质:f(1) = 1,且当a 和b 互质时,f(ab) = f(a) f(b)

若一个函数f(n) 有如下性质:f(1) = 1,且对两个随意正整数a 和b 而言,不只限这两数互质时,f(ab) = f(a)f(b) 都成立,则称此函数为完全积性函数

在数论以外的其他数学领域中所谈到的积性函数通常是指完全积性函数

例子

  • φ(n) -欧拉φ函数,计算与n互质的正整数之数目
  • μ(n) -默比乌斯函数,关于非平方数质因子数目
  • gcd(n,k) -最大公因子,当k固定的情况
  • \sigma_k(n): 除数函数n的所有正因子的k次之和,当中k可为任何复数。在特例中有:
    • \sigma_0(n) = d(n) - n的正因子数目
    • \sigma_1(n) = \sigma(n) - n的所有正因子之和
  • 1(n) -不变的函数,定义为 1(n)=1 (完全积性)
  • Id(n) -单位函数,定义为 Id(n)=n (完全积性)
  • Idk(n) -幂函数,对于任何复数、实数k,定义为Idk(n) = nk (完全积性)
    • Id0(n) = 1(n) 及
    • Id1(n) = Id(n)
  • ε(n) -定义为:若n = 1,ε(n)=1;若n > 1,ε(n)=0。有时称为“对于狄利克雷卷积的乘法单位”(完全积性)
  • (n/p) -勒让德符号p是固定质数(完全积性)
  • λ(n) -刘维尔函数,关于能整除n的质因子的数目
  • γ(n),定义为γ(n)=(-1)ω(n),在此加性函数ω(n)是不同能整除n的质数的数目
  • 所有狄利克雷特征均是完全积性的

//上面的资料摘自维基百科。

可见本题目为:除数函数,不完全奇性函数。正因子的个数;

const int INF= 0x3f3f3f3f;//  另外参见了大神的代码,发现最大值可以这么表示。
原因如下:http://blog.csdn.net/dr5459/article/details/8211408

有如下性质:

1、当gcd(a,b)=1时,s[a*b]=s[a]*s[b].

2、当p为素数时,s[p^n]=p^0+p^1+……+p^n=(p^(n+1)-1)/(p-1)

3、(a * b ) / c % M = (a % M * b % M * inv(c))% M;

其中inv(c)即满足 (c*inv(c))%M=1的最小整数,这里M=29

inv(1)= 1, inv(2)=15,inv(166)=18;

prove:

( a * b ) % m = ( a % m * b % m ) % m;

a = p1 * m + r1;

b = p2 * m + r2;

a * b = p1 * p2 * m^2 + p1 * m * r2 + p2 * m * r1 + r1 * r2;

so:

(a * b) % m = (a mod m * b mod m) mod m;

set a * b = d;

d = c * p;

1...(d mod m * inv(c)) mod m = (c mod m * p mod m * inv(c) mod m) mod m = ( (c*inv(c))mod m * p mod m) mod m = p mod m;

2...(d /c)mod m = p mod m;

so 1... = 2...;

The result is the significant signals that we desire.


所以,S((2^2)^x) * S(3^x) * S(167 ^ n) = S(2004^n);



//============================================================================
// Name        : Math_hdu1452.cpp
// Author      : vit
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <stdio.h>
#include <string.h>

#define MOD 29

using namespace std;

int pow(int a,int b)
{
    int ans=1;
    while(b)
    {
        if(b&1)//judge odd or even
        	ans = (ans * a) % MOD;
        a = a * a % MOD;
        b=b>>1;
    }
    return ans;
}


int main() {
	int x;
	int a, b, c;
	while(cin >> x && x){
		a = (pow(2,2*x + 1) - 1) * 1 % MOD;
		b = (pow(3,x + 1) - 1) * 15 % MOD;
		c = (pow(167, x + 1) - 1) * 18 % MOD;

		cout << a * b * c % MOD << endl;
	}
	return 0;
}



转载于:https://my.oschina.net/u/1017188/blog/333763

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值