BZOJ3560 DZY Loves Math V 数论 快速幂

原文链接http://www.cnblogs.com/zhouzhendong/p/8111725.html


题目传送门 - BZOJ3560


题意概括

给定n个正整数a1,a2,…,an,求

的值(答案模10^9+7)。

1<=n<=10^5,1<=ai<=10^7。


题解

  本人是蒟蒻。

  可以看这位大佬的(给出链接)

http://blog.csdn.net/popoqqq/article/details/42739963


代码

呵呵,调试的时候照着他的改,改的几乎一样……

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long LL;
const LL N=100005;
LL mod=1e9+7;
LL n,tot=0;
struct Node{
	LL p,t;
}q[N*20];
bool operator < (Node a,Node b){
	return a.p<b.p;
}
void fj(LL v){
	for (LL i=2;i*i<=v;i++)
		if (v%i==0){
			q[++tot].p=i;
			q[tot].t=0;
			while (v%i==0)
				v/=i,q[tot].t++;
		}
	if (v>1)
		q[++tot].p=v,q[tot].t=1;
}
LL Pow(LL x,LL y,LL mod){
	if (y==0)
		return 1LL;
	LL xx=Pow(x,y/2,mod);
	xx=xx*xx%mod;
	if (y&1LL)
		xx=xx*x%mod;
	return xx;
}
LL Inv(LL x,LL mod){
	return Pow(x,mod-2,mod);
}
LL calc(LL L,LL R){
	LL sum[30];
	LL p=q[L].p,res=1;
	sum[0]=1;
	for (int i=1;i<30;i++)
		sum[i]=(sum[i-1]*p+1)%mod;
	for (int i=L;i<=R;i++)
		res=res*sum[q[i].t]%mod;
	res=(res-1)*(p-1)%mod*Inv(p,mod)%mod+1;
	return res%mod;
}
int main(){
	scanf("%lld",&n);
	for (int i=1,a;i<=n;i++){
		scanf("%lld",&a);
		fj(a);
	}
	sort(q+1,q+tot+1);
	int last=0;
	LL ans=1;
	for (int i=1;i<=tot;i++)
		if (i==tot||q[i].p!=q[i+1].p)
			ans=ans*calc(last+1,i)%mod,last=i;
	printf("%lld",(ans%mod+mod)%mod);
	return 0;
}

  

原文地址:https://www.cnblogs.com/zhouzhendong/p/8111725.html

时间: 2024-11-08 23:55:57

BZOJ3560 DZY Loves Math V 数论 快速幂的相关文章

BZOJ3560: DZY Loves Math V

虽然不是很神的题,不过拿短代码搞到rank1了那么纪念下. 先观察样例. 6=2*3; 10=2*5; 15=3*5; 对应答案:1595=5*11*29: 其中: 5=((1+2)*(1+2)*1*(2-1)+1)/2 11=((1+3)*1*(1+3)*(3-1)+1)/3 29=(1*(1+5)*(1+5)*(5-1)+1)/5 证明不写了……自行领会精神. 就是对每个n因数分解后对每个p分开搞搞. [代码](话说好不容易才发现插入代码这功能) 1 #include<cstdio> 2

BZOJ 3560 DZY Loves Math V 数论

题目大意:给定a1,a2,...,an,求 由于φ是积性函数,我们可以将i1i2...in分解质因数,对于每个质因数分开讨论,求积即可 将每个a分解质因数,假设分解后某个质数p在每个ai中的次数分别是bi,那么p对答案的贡献就是 于是对p^j维护一个前缀和,直接计算即可 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MOD 10000

【BZOJ 3560】 3560: DZY Loves Math V (欧拉函数)

3560: DZY Loves Math V Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 241  Solved: 133 Description 给定n个正整数a1,a2,-,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,-,an. Output 仅一行答案. Sample Input 3 6 10 15 Sample Output 1595 HINT 1<=n<=1

bzoj 3560 DZY Loves Math V - 线性筛 - 数论 - 扩展欧几里得算法

给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. Output 仅一行答案. Sample Input 3 6 10 15 Sample Output 1595 Hint 1<=n<=10^5,1<=ai<=10^7.共3组数据. 题目大意 (题目过于简洁,完全不需要大意) 题目虽然很简洁,但是处处挖着坑等你跳. 原计划两个小时把今天讲的例题A完,实际上两个小时都被这道题

【bzoj3560】DZY Loves Math V 欧拉函数

题目描述 给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). 输入 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. 输出 仅一行答案. 样例输入 3 6 10 15 样例输出 1595 题解 欧拉函数 由于 $\varphi$ 是积性函数,所以可以单独考虑每个质因子的贡献. 那么对于最终的 $a=i_1i_2\dots i_n$ ,若其包含 $p^c\ ,\ c>0$ ,则贡献为 $\frac{p-1}{p}·p^c$ .因此求出 $p^c$ 的

【BZOJ】3309: DZY Loves Math 莫比乌斯反演优化

3309: DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b). Input 第一行一个数T,表示询问数. 接下来T行,每行两个数a,b,表示一个询问. Output 对于每一个询问,输出一行一个非负整数作为回答. Sample In

bzoj 3309 DZY Loves Math

LINK:DZY Loves Math 一道比较有意思的数论题 原谅我的智障多调了40min. 可以简单的推式子推出 答案为\(\sum{w=1}^n\frac{n}{w}\frac{m}{w}\sum{x|w}\mu(x)f(\frac{w}{x})\) f函数定义和题目中一致. 考虑后面前缀和怎么求 发现光求f(x)复杂度都比较高.如果我们把f(x)求出再调和级数预处理 那得GG 1e7过不了log+根号 考虑考虑一下\(\mu\)和f的这种形式肯定值有局限 设后面的东西为g(x) 不难发现

BestCoder Round #29——A--GTY&#39;s math problem(快速幂(对数法))、B--GTY&#39;s birthday gift(矩阵快速幂)

GTY's math problem Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 0    Accepted Submission(s): 0 Problem Description GTY is a GodBull who will get an Au in NOI . To have more time to learn alg

[BZOJ3568]DZY Loves Math VII

本人BZOJ的处女作. 这题题面还是蛮有趣的吧. 然后三个问题都蛮有意思的. 要保证正确性,出数据还是异常蛋疼啊. 本来各出三题的.但是考虑到是OJ上的题,就搞在一起了.这样代码量就会比较大. [BZOJ3568]DZY Loves Math VII,布布扣,bubuko.com