HDU2879 HeHe 数论积性函数

题目名字有点搓,做题时没做出来,学长他们做出了,发现跟网上题解的思路没太大区别,网上所有题解的分析也都转自同一个地方,看样子这道题目不是那么好想的,没办法按照解析画了半天,计算器按了半天,理解了,自己敲出来了,觉得值得留念,打算再刷几道这样的

转自:http://blog.csdn.net/kksleric/article/details/8096914

定义:对于正整数n的一个算术函数
f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数。若对于某积性函数
f(n) ,就算a, b不互质,也有f(ab)=f(a)f(b),则称它为完全积性的

性质:积性函数的值完全由质数的幂决定

常见积性函数:

φ(n) -欧拉函数,计算与n互质的正整数之数目 

 μ(n) -莫比乌斯函数,关于非平方数的质因子数目

 gcd(n,k) -最大公因子,当k固定的情况 

 d(n) -n的正因子数目 

 σ(n) -n的所有正因子之和 

 σk(n) - 因子函数,n的所有正因子的k次之和,当中k可为任何复数。 

 Idk(n) -幂函数,对于任何复数、实数k,定义为Idk(n) = n^k (完全积性) 

 λ(n) -刘维尔函数,关于能整除n的质因子的数目 

 γ(n),定义为γ(n)=(-1)^ω(n),在此加性函数ω(n)是不同能整除n的质数的数目

hdu 2879 HeHe

题意:In the equation X^2≡X(mod N) where x∈[0,N-1], we define He[N] as the number of solutions.

And furthermore, define HeHe[N]=He[1]*……*He[N]

Now here is the problem, write a program, output HeHe[N] modulo M for a given pair N, M.

证明转自http://www.fengshuxin.com/number_theory_hdu_2879.html

1.证明p是素数时He[p]=2.

x^2=x(mod p)—->p|x(x-1).因为x<p所以p不整除x也不整除x-1.所以成立的情况下是x=1或者x=0.

He[p^k]=2,证明类似上面的

2.证明对于不同的两个素数p和q,He[p*q]=4=He[p]*He[q];

首先x=0和x=1是肯定成立的,

现在由x^2=x(mod p*q)

—>p*q|x(x-1)

假设x=k*p[k<q]

——>p*q|k*p(k*p-1)

——->q|k(k*p-1)

——->q|(k*p-1)  因为k<q  q是素数 所以gcd(k,q)=1

——->k*p+t*q=1

这里就变成了这个方程的解,由扩展欧几里得知,这个方程有解,但是k在[0,q-1]之内的解就一个,所以这里多一个解,同理设x=k*p又有一个解,所以x^2=x(mod p*q)有4个解(x=0 ,x=1 ,x=k*p, x=k*q)

—->He[p*q]=4=He[p]*He[q];

那么He[p1^r1*p2^r2*……*pk^rk]=2^k然后可以进一步算出HeHe只需要算n以内每个素数的倍数的个数.

#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>
#include<cctype>

#define ll long long

#define LL __int64

#define eps 1e-8

#define inf 0xfffffff

//const ll INF = 1ll<<61;

using namespace std;

//vector<pair<int,int> > G;
//typedef pair<int,int > P;
//vector<pair<int,int> > ::iterator iter;
//
//map<ll,int >mp;
//map<ll,int >::iterator p;

const int N = 10000000 + 5;

bool isprime[N];

int prime[N];

void clear() {
	memset(isprime,false,sizeof(isprime));
	memset(prime,0,sizeof(prime));
}

void init()
{
	prime[0] = prime[1] = 1;
	for(int i=2;i<N;i++) {
		if(!prime[i])
			for(int j=i;j<N;j+=i)
				prime[j]++;//j为某个素数倍数的个数
	}

	prime[1] = 0;
	for(int i=2;i<N;i++)
		prime[i] += prime[i - 1];//n以内的每个素数,它的倍数也在n以内的个数之和
}

LL quick(LL a,LL b,LL m) {
	LL ans = (LL)1;
	while(b) {
		if(b&1) {
			ans =(ans * a)%m;
			b--;
		}
		b >>= 1;
		a = a * a%m;
	}
	return ans;
}

int main() {
	clear();
	init();
	int k = 1;
	LL n,m;
	int t;
	scanf("%d",&t);
	while(t--) {
		scanf("%I64d %I64d",&n,&m);
		LL ans = quick((LL)2,prime[n],m);
		printf("%I64d\n",ans);
	}
	return 0;
}

HDU2879 HeHe 数论积性函数,布布扣,bubuko.com

时间: 2024-10-12 22:21:26

HDU2879 HeHe 数论积性函数的相关文章

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

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

积性函数,线性筛入门 HDU - 2879

HDU - 2879HeHe 题意:He[N]为[0,N−1]范围内有多少个数满足式子x2≡x (mod N),求HeHe[N]=He[1]×……×He[N] 我是通过打表发现的he[x]=2k,k为x是质因子个数,不过这是可以通过积性函数证明的. 关于积性函数的定义: 对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时,f(ab)=f(a)f(b),在数论上就称它为积性函数.若对于某积性函数 f(n) ,就算a, b不互质,也有f(ab)=f(a)f(b),则称它为完全积性

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

本文转自: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 写在前面 笔者在刷题过程中遇到一些求积性函数前缀和的问题,其中有一类问题需要在低于线性时间复杂度的算法,今天就来浅析一下这类问题的求解方法,当作以后讲课

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的解有

常见积性函数(转自百科)

前面做hdu1452 用过积性函数这个东西...刚才遇到又不会了.所以弄一点资料提醒一下自己 在非数论的领域,积性函数指所有对于任何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),则称它为完全积性的.[1] s(6)=s(2)*s(3)=3*4=12; s(20)=

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(

poj 2480 Longge&amp;#39;s problem 积性函数性质+欧拉函数

题意: 求f(n)=∑gcd(i, N) 1<=i <=N. 分析: f(n)是积性的数论上有证明(f(n)=sigma{1<=i<=N} gcd(i,N) = sigma{d | n}phi(n / d) * d ,后者是积性函数),能够这么解释:当d是n的因子时,设1至n内有a1,a2,..ak满足gcd(n,ai)==d,那么d这个因子贡献是d*k,接下来证明k=phi(n/d):设gcd(x,n)==d,那么gcd(x/d,n/d)==1,所以满足条件的x/d数目为phi(

poj 2480 Longge&#39;s problem 积性函数性质+欧拉函数

题意: 求f(n)=∑gcd(i, N) 1<=i <=N. 分析: f(n)是积性的数论上有证明(f(n)=sigma{1<=i<=N} gcd(i,N) = sigma{d | n}phi(n / d) * d ,后者是积性函数),可以这么解释:当d是n的因子时,设1至n内有a1,a2,..ak满足gcd(n,ai)==d,那么d这个因子贡献是d*k,接下来证明k=phi(n/d):设gcd(x,n)==d,那么gcd(x/d,n/d)==1,所以满足条件的x/d数目为phi(

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(