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 - 抱歉 (拓扑学:多面体欧拉定理引申)
呕,大一下学期的第一周结束啦,一周过的挺快也挺多出乎意料的事情的~ 随之而来各种各样的任务也来了,嘛毕竟是大学嘛,有点上进心的人多多少少都会接到不少任务的,忙也正常啦~端正心态 开心面对就好啦~ 今天 ...
随机推荐
- SQL Server 2014数据库开启远程连接(Windows Server 2016)
1.打开SQL SERVER 配置管理器 2. 设置防火墙的入站规则 3.使用Navicat Premium连接SQL Server
- 超长干货丨Kubernetes网络快速入门完全指南
Kubernetes网络一直是一个非常复杂的主题.本文将介绍Kubernetes实际如何创建网络以及如何为Kubernetes集群设置网络. 本文不包括如何设置Kubernetes集群.这篇文章中的所 ...
- 基于MACVLAN配置VMWARE虚拟机中容器网络
基于MACVLAN配置VMWARE虚拟机中容器网络 测试部环境组 201711 0 文档说明 MACVLAN是docker的一种支持跨主机网络的driver.macvlan本身是linux kerne ...
- buuctf——facebook1
分为注册和登陆两个页面 据大佬wp登陆页面又盲注,但我没测试 直接注册后登陆 注册后发现,会显示输入的url 根据目录扫描,发现robots.txt和flag.php robots.txt有源码备份 ...
- Introducing .NET 5
Today, we’re announcing that the next release after .NET Core 3.0 will be .NET 5. This will be the n ...
- 【代码学习】PYTHON 列表循环遍历及列表常见操作
一.for循环 为了更有效率的输出列表的每个数据,可以使用循环来完成 代码: A = ['xiaoWang','xiaoZhang','xiaoHua'] for tempName in A: pri ...
- Vue——前端生成二维码
与后端生成二维码相比,前端生成二维码更具有灵活性,下面就介绍两种前端生成二维码的方式,两种方式相比之下,vue-qr比qrcode多了一个再中间添加logo的功能. 方式一:qrcode npm np ...
- ES6简单语法
ES6 简单语法: 变量声明 ES5 var 声明变量为全局变量 会变量提升 ES6 let 声明的变量为块级变量 且不能重复声明 不存在变量提升 # {}一个大括号为一个作用域 ES6 const ...
- 通过python调用jenkins 常用api操作
# -*- coding: utf-8 -*- import jenkins class TestJenkins(object): def __new__(cls, *args, **kwargs): ...
- 【Html 页面布局】
float:left方式布局 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /& ...