HDU 5525:Product 欧拉定理
Product
给n个数{A}_{1},{A}_{2}....{A}_{n}A1,A2....An,表示N=\prod_{i=1}^{n}{i}^{{A}_{i}}N=∏i=1niAi。求N所有约数之积。
输入有多组数据.
每组数据第一行包含一个整数n.(1\leq n\leq {10}^{5})(1≤n≤105)
第二行n个整数{A}_{1},{A}_{2}....{A}_{n}A1,A2....An,保证不全为0.(0\leq {A}_{i}\leq {10}^{5})(0≤Ai≤105).
数据保证 \sum n\leq 500000∑n≤500000.
对于每组数据输出一行为答案对{10}^{9}+7109+7取模的值.
4
0 1 1 0
5
1 2 3 4 5
36
473272463
官方题解:
做了一道div1的第三题,很好的一道题
参考了别人的代码,其中一处是(p^index)%mod,如果index很大的话,根据欧拉定理,就可以变成(p^(index%(phi(mod))))%mod。记录一下。
代码:
#pragma warning(disable:4996)
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
using namespace std; typedef long long ll; ll N;
const int maxn = 100010;
const ll mod = 1e9 + 7;
const ll mod2 = 2 * (mod - 1);
ll index[maxn], L[maxn], R[maxn];
int num, pri[maxn], vis[maxn];
vector<int>have[maxn]; void init()
{
num = 0;
int i, j, n;
for (i = 2; i < maxn; i++)
{
if (vis[i])
continue;
pri[++num] = i;
for (j = i + i; j < maxn; j = j + i)
{
vis[j] = 1;
}
}
for (i = 1; i < maxn; i++)
{
n = i;
for (j = 1; j <= num&&pri[j] <= n; j++)
{
while (n%pri[j] == 0)
{
have[i].push_back(j);//记录所含有的质数,用质数的下标记录
n /= pri[j];
}
}
}
} ll getresult(ll A, ll n, ll k)
{
ll b = 1;
while (n > 0)
{
if (n & 1)
{
b = (b*A) % k;
}
n = n >> 1;
A = (A*A) % k;
}
return b;
} void solve(int cishu, int n)
{
int temp;
int si = have[cishu].size();
for (int i = 0; i < si; i++)
{
temp = have[cishu][i];
index[temp] = (index[temp] + n) % mod2;
}
} int main()
{
//freopen("i.txt", "r", stdin);
//freopen("o.txt", "w", stdout); int x;
ll k, n, ans;
init();
while (scanf("%d", &N) == 1)
{
memset(index, 0, sizeof(index));
for (int i = 1; i <= N; i++)
{
scanf("%d", &x);
solve(i, x);
}
int p = 1;
while (pri[p] < N)
p++;
N = p;
L[0] = R[N + 1] = 1;
for (int i = 1; i <= N; i++)
L[i] = L[i - 1] * (index[i] + 1) % mod2;
for (int i = N; i >= 1; i--)
R[i] = R[i + 1] * (index[i] + 1) % mod2;
ans = 1;
for (int i = 1; i <= N; i++)
{
k = L[i - 1] * R[i + 1] % mod2;
n = index[i] * (index[i] + 1) / 2 % mod2;
ans = ans*getresult(pri[i], n*k%mod2,mod) % mod;
}
printf("%lld\n", ans);
}
//system("pause");
return 0;
}
HDU 5525:Product 欧拉定理的更多相关文章
- hdu 5525 Product 数论算贡献
Product Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Proble ...
- HDU 5525 Product 数论
题意: 给出一个长度为\(n(1 \leq n \leq 10^5)\)的序列\(A_i\),\(N=\prod\limits_{i=1}^{n}i^{A_i}\).求\(N\)的所有约数的乘积. 分 ...
- Codeforces Round #338 (Div. 2) D. Multipliers 数论
D. Multipliers 题目连接: http://codeforces.com/contest/615/problem/D Description Ayrat has number n, rep ...
- HDU 4704 欧拉定理
题目看了很久没看懂 就是给你数n,一种函数S(k),S(k)代表把数n拆成k个数的不同方案数,注意如n=3,S(2)是算2种的,最后让你求S(1~n)的和模1e9+7,n<=1e100000.那 ...
- HDU 1452 欧拉定理
让你求$2004^x$所有因子之和,因子之和函数是积性函数$\sigma(n)=\sum_{d|n}d=\prod_{i=0}^{m}(\sum_{j=0}^{k_i}{P_i^{j}})$可用二项式 ...
- hdu 1665 That Nice Euler Circuit(欧拉定理)
输入n个点,然后从第一个点开始,依次链接点i->点i+1,最后回到第一点(输入中的点n),求得到的图形将平面分成了多少部分. 根据欧拉定理 v_num + f_num - e_num = 2可知 ...
- hdu 1395 2^x mod n = 1 暴力过~~最好学下欧拉定理~~~
2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- hdu 4549 M斐波那契数列 矩阵快速幂+欧拉定理
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Problem ...
- 『ACM C++』HDU杭电OJ | 1418 - 抱歉 (拓扑学:多面体欧拉定理引申)
呕,大一下学期的第一周结束啦,一周过的挺快也挺多出乎意料的事情的~ 随之而来各种各样的任务也来了,嘛毕竟是大学嘛,有点上进心的人多多少少都会接到不少任务的,忙也正常啦~端正心态 开心面对就好啦~ 今天 ...
随机推荐
- oracle查询表统计行数与注释
SELECT TABLE_NAME,NUM_ROWS,(select COMMENTS from user_tab_comments WHERE TABLE_NAME=C.TABLE_NAME) FR ...
- 吴裕雄--天生自然TensorFlow2教程:激活函数及其梯度
import tensorflow as tf a = tf.linspace(-10., 10., 10) a with tf.GradientTape() as tape: tape.watch( ...
- Python读取MNIST数据集
MNIST数据集获取 MNIST数据集是入门机器学习/模式识别的最经典数据集之一.最早于1998年Yan Lecun在论文: Gradient-based learning applied to do ...
- VUE 鼠标右键自定义
需要在区域内右击自定义菜单的DIV绑定contextmenu右击事件 <div style="width:100% ; z-index: inherit;position: rel ...
- 【PAT甲级】1059 Prime Factors (25 分)
题意: 输入一个正整数N(范围为long int),输出它等于哪些质数的乘积. trick: 如果N为1,直接输出1即可,数据点3存在这样的数据. 如果N本身是一个质数,直接输出它等于自己即可,数据点 ...
- VS release模式下进行调试设置
工程项目上右键 打开 属性界面 1.c++ --- 常规 ---- 调试信息格式 选 程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi) 2.c/c++ ---- 优化 ---- ...
- CSS各种小技巧
/* *背景的透明度设置 */ -moz-opacity: 0.8; opacity:.80; filter: alpha(opacity=80); 待续...
- login() got an unexpected keyword argument 'extra_context'
环境:xadmin django2.0 python3.7.4 操作登录login()或者注销logout()报以上错误的解决办法如下: 在xadmin的views/website.py中 修改 ...
- PTA的Python练习题(九)
从 第3章-18 输出10个不重复的英文字母 继续 1. a=input() b='' c=a.replace(' ','') for i in c: if i not in b: b=b+i d=l ...
- SSH整合hibernate无法正常自动生成表
检查持久化类的属性和映射文件是否正确配置,比如date格式的属性最容易配置错误