hdu-5525 Product(费马小定理)
题目来源:http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=644&pid=1003
前面用奇偶性约掉2,后面处理前缀积和后缀积。
WA了很久的地方:在约掉2之前不能模(mod-1)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long LL;
const int N = 100001;
LL Mod = 1000000007;
LL mod = Mod - 1;
char vis[N];
int prime[N];
vector<int> G[N];
int tot = 0;
void init_prime()
{
memset(vis, 0, sizeof(vis));
for(int i=2; i<N; i++)
{
if(!vis[i])
{
prime[++tot] = i;
for(int j=i; j<N; j+=i)
{
vis[j] = 1;
G[j].push_back(i);
}
}
}
}
LL quick(LL a, LL b)
{
LL c = 1;
while(b)
{
if(b&1)
c = c * a % Mod;
b >>= 1;
a = a * a % Mod;
}
return c;
}
int a[N];
LL num[N]; //素数i的个数
LL pre[N], suf[N];
int main()
{
init_prime();
int i, j, k, m, n;
while(scanf("%d", &n) == 1)
{
for(i=1; i<=n; i++)
scanf("%d", a+i);
memset(num, 0, sizeof(num));
for(i=1; i<=n; i++)
{
for(j=0; j<G[i].size(); j++)
{
int tp = 0, x = i;
while(x%G[i][j] == 0)
{
tp ++;
x /= G[i][j];
}
num[G[i][j]] += a[i] * tp;
}
}
///处理(p1+1)*(p2+1)*...*(px+1)的前缀积和后缀积
pre[0] = 1;
for(int i=1; i<=tot; i++)
{
pre[i] = pre[i-1];
if(num[prime[i]])
pre[i] = pre[i] * (num[prime[i]] % mod +1) % mod;
}
suf[tot+1] = 1;
for(int i=tot; i>=1; i--)
{
suf[i] = suf[i+1];
if(num[prime[i]])
suf[i] = suf[i] * (num[prime[i]] % mod +1) % mod;
}
/*---------------------------------------------*/
LL ans = 1;
for(int i=1; i<=tot; i++)
{
LL tmp, p = num[prime[i]];
if(p & 1)
tmp = p % mod * (((p+1)>>1) % mod) % mod;
else
tmp = (p>>1) %mod * ((p+1) % mod) % mod;
ans = ans * quick(prime[i], tmp * pre[i-1] % mod * suf[i+1] % mod) % Mod;
}
printf("%I64d\n", ans);
}
return 0;
}
hdu-5525 Product(费马小定理)的更多相关文章
- hdu 4704 Sum 费马小定理
题目链接 求2^n%mod的值, n<=10^100000. 费马小定理 如果a, p 互质, 那么a^(p-1) = 1(mod p) 然后可以推出来a^k % p = a^(k%(p-1) ...
- HDU - 6440(费马小定理)
链接:HDU - 6440 题意:重新定义加法和乘法,使得 (m+n)^p = m^p + n^p 成立,p是素数.,且satisfied that there exists an integer q ...
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
Sum Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...
- HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description Sample Input 2 Sample Outp ...
- hdu 4704(费马小定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4704 思路:一道整数划分题目,不难推出公式:2^(n-1),根据费马小定理:(2,MOD)互质,则2^ ...
- HDU 5667 Sequence【矩阵快速幂+费马小定理】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5667 题意: Lcomyn 是个很厉害的选手,除了喜欢写17kb+的代码题,偶尔还会写数学题.他找到 ...
- hdu 4704 Sum(组合,费马小定理,快速幂)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4704: 这个题很刁是不是,一点都不6,为什么数据范围要开这么大,把我吓哭了,我kao......说笑的, ...
- hdu 4549 M斐波那契数列(快速幂 矩阵快速幂 费马小定理)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4549: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速 ...
- hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)
题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3. ...
- HDU 5667 Sequence 矩阵快速幂+费马小定理
题目不难懂.式子是一个递推式,并且不难发现f[n]都是a的整数次幂.(f[1]=a0;f[2]=ab;f[3]=ab*f[2]c*f[1]...) 我们先只看指数部分,设h[n]. 则 h[1]=0; ...
随机推荐
- poj 3254 Corn Fields
http://poj.org/problem?id=3254 Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- UVALive 7147 World Cup(数学+贪心)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
- 论文阅读(Zhuoyao Zhong——【aixiv2016】DeepText A Unified Framework for Text Proposal Generation and Text Detection in Natural Images)
Zhuoyao Zhong--[aixiv2016]DeepText A Unified Framework for Text Proposal Generation and Text Detecti ...
- windows下利用virtual 安装 flask
出处: https://segmentfault.com/a/1190000002450878 本文介绍Windows下如何从零开始搭建Python + Flask开发环境. 安装Python 2.7 ...
- 物理引擎-Physx的源代码去哪里找
前几天无意中看到了Physx开源了,就连自己的领导也高兴了一下,让本道士去下载源代码琢磨一下,顺便做几个例子跑起来.结果没成想这个nvidia的github上的源代码被移除了,而且csdn,pudn上 ...
- TurboDemo软件使用教程:视频编辑
视频软件TurboDemo中不仅可以快速的捕捉屏幕,而且可以对视频进行编辑,本文来详细的了解一下这个步骤. 当你完整屏幕捕捉和录制后,点击系统托盘上的箭头或点击键盘上的“print screen”键之 ...
- gerrit add review标签
添加verifyed标签 http://blog.csdn.net/terence427/article/details/16840697
- Welogic中的JMS
WebLogic JMS 概述 企业消息传递系统使得应用程序能够通过消息的交换与其他系统之间进行通信.消息是包含协调不同应用程序之间通信所需信息的请求.报告和/或事 件.消息提供了提取级别,使您能够从 ...
- 一个section刷新 一个cell刷新
一个section刷新 一个cell刷新 //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2]; [tabl ...
- ThreadLocal是什么?保证线程安全
早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. 当使 ...