题意:给定n和a[],令N = ∏(1≤i≤n)ia[i],求N的所有约数的积(取模1e9+7)

思路:

  • 假定N因式分解后的结果是2p1*3p2*5p3*...,如何计算答案呢?
  • 单独看2p1这一项,考虑它所有的贡献,它在N的约数里面总共会出现P=(p2+1)*(p3+1)*...次,由于是求乘积,而且2的指数可以取[0,p1],那么它总共产生的答案为(20)P*(21)P*(22)P*...=2(p1+1)*p1/2 * P=2p1*M/2,其中M=(p1+1)*(p2+1)*(p3+1)*...
  • 因此答案就是2p1*M/2*3p2*M/2*5p3*M/2*...
  • 所以首先把N的因式分解式求出来,然后按照上述公式求解即可
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define pb(x) push_back(x)
#define mp(x, y) make_pair(x, y)
#define all(a) (a).begin(), (a).end()
#define mset(a, x) memset(a, x, sizeof(a))
#define mcpy(a, b) memcpy(a, b, sizeof(b))
#define cas() int T, cas = 0; cin >> T; while (T --)
template<typename T>bool umax(T&a, const T&b){return a<b?(a=b,true):false;}
template<typename T>bool umin(T&a, const T&b){return b<a?(a=b,true):false;}
typedef long long ll;
typedef pair<int, int> pii; #ifndef ONLINE_JUDGE
#include "local.h"
#endif const int mod = 1e9 + 7;
const int N = 1e5 + 7; vector<int> prime;
ll total[N];
bool used[N];
int a[N], ID[N]; void getPrime() {
for (ll i = 2; i < N; i ++) {
if (!used[i]) {
prime.pb(i);
for (ll j = i * i; j < N; j += i) used[j] = true;
}
}
for (int i = 0; i < prime.size(); i ++) {
ID[prime[i]] = i;
}
} pair<vector<int>, vector<int> > Y[N]; vector<int> fac;
vector<int> cnt; void div(int x) {
if (x > 2 && !used[x]) {
fac.pb(x);
cnt.pb(1);
return;
}
for (int i = 0; i < prime.size() && prime[i] <= x; i ++) {
int c = 0;
while (x % prime[i] == 0) {
c ++;
x /= prime[i];
}
if (c) {
fac.pb(prime[i]);
cnt.pb(c);
}
if (x < prime[i]) break;
}
} ll powermod(ll a, ll n, ll mod) {
ll ans = 1;
while (n) {
if (n & 1) ans = ans * a % mod;
a = a * a % mod;
n >>= 1;
}
return ans;
} int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif // ONLINE_JUDGE
getPrime();
for (int i = 1; i < N; i ++) {
fac.clear();
cnt.clear();
div(i);
Y[i] = mp(fac, cnt);
}
int n;
while (cin >> n) {
for (int i = 1; i <= n; i ++) {
scanf("%d", a + i);
}
mset(total, 0);
for (int i = 1; i <= n; i ++) {
for (int j = 0; j < Y[i].first.size(); j ++) {
int id = ID[Y[i].first[j]];
total[id] += Y[i].second[j] * a[i];
}
}
ll M = 1, ans = 1;
ll Mod = 2 * mod - 2;
for (int i = 0; i < prime.size(); i ++) {
M = M * ((total[i] + 1) % Mod) % Mod;
}
for (int i = 0; i < prime.size(); i ++) {
ans = ans * powermod(prime[i], M * (total[i] % Mod) % Mod / 2, mod) % mod;
}
cout << ans << endl;
}
return 0;
}

  

[hdu5525 Product]暴力的更多相关文章

  1. UVA.10305 Maximum Product (暴力)

    UVA.10305 Maximum Product (暴力) 题意分析 直接枚举起点和重点,然后算出来存到数组里面,sort然后取最大值即可. 代码总览 #include <iostream&g ...

  2. hdu-5525 Product(费马小定理)

    题目来源:http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=644&pid=1003 前面用奇偶性约掉2, ...

  3. Codeforces Round #670 (Div. 2) B. Maximum Product (暴力)

    题意:有一长度为\(n\)的序列,求其中任意五个元素乘积的最大值. 题解:先排序,然后乘积能是正数就搞正数,模拟一下就好了. 代码: int t; ll n; ll a[N]; int main() ...

  4. PE刷题记

    PE 中文翻译 最喜欢做这种很有意思的数学题了虽然数学很垃圾 但是这个网站的提交方式好鬼畜啊qwq 1.Multiples of 3 and 5 直接枚举 2.Even Fibonacci numbe ...

  5. 暴力求解——最大乘积 Maximum Product,UVa 11059

    最大乘积 Maximum Product 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/B 解题思路 ...

  6. UVa 11059 - Maximum Product 最大乘积【暴力】

    题目链接:https://vjudge.net/contest/210334#problem/B 题目大意:Given a sequence of integers S = {S1, S2, . . ...

  7. UVA 11059 Maximum Product【三层暴力枚举起终点】

    [题意]:乘积最大的子序列.n∈[1,10],s∈[-10,10] [代码]: #include<bits/stdc++.h> using namespace std; int a[105 ...

  8. 利用Python自动生成暴力破解的字典

    Python是一款非常强大的语言.用于测试时它非常有效,因此Python越来越受到欢迎. 因此,在此次教程中我将聊一聊如何在Python中生成字典,并将它用于任何你想要的用途. 前提要求 1,Pyth ...

  9. [leetCode][001] Maximum Product Subarray

    题目: Find the contiguous subarray within an array (containing at least one number) which has the larg ...

随机推荐

  1. Python - 调用接口合并文件夹下多个Excel表

    在工作中经常遇到需要打开许多个excel表格,然后合并的需求,合并的同时要求格式必须原汁原味的保留.利用VBA代码可以比较轻松的解决,现在我们来看Python中如何实现. 上代码: from open ...

  2. 6.表单提交,input键盘变搜索,有关自定义属性input操作

    1.键盘变搜索 1.) 在form 上加action="#", 2.)input type=search, 3.)此时会提交到 #,需要再添加一个input display=non ...

  3. git基本设置——git工具篇

    1.设置邮箱和用户名 /*解释: --global 选项代表对 Git 进行全局设置.*/ $ git config --global user.name "Your Name" ...

  4. 如何用Github钩子做自动部署

    最近机缘巧合的购置了域名和服务器,不用实在是浪费,再加上一直没有属于自己的个人网站,所以打算用hexo在服务器上玩一下,这样也就不用再纠结用Github pages还是Gitee pages了.当然, ...

  5. Spark RDD----pyspark第四次作业

    1.pyspark交互式编程 查看群里发的“data01.txt”数据集,该数据集包含了某大学计算机系的成绩,数据格式如下所示: Tom,DataBase,80 Tom,Algorithm,50 To ...

  6. 初学者的Pygame安装教程

    最近在自学python,在看完了些基础知识之后,准备写个小项目[外星人入侵],这个项目需要安装pygame. 所以就在网上找到了两个下载地址https://bitbucket.org/pygame/p ...

  7. 8、Flink Table API & Flink Sql API

    一.概述 上图是flink的分层模型,Table API 和 SQL 处于最顶端,是 Flink 提供的高级 API 操作.Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时 ...

  8. php utf-8

    header(”Content-Type: text/html; charset=UTF-8″) 控制器控释模板输出: 值: array (size=8) 1 => array (size=4) ...

  9. PHP把PNG图片转化为JPG时透明背景变黑色

    $type = exif_imagetype($srcimg); switch($type) { case 1: $simg = imagecreatefromgif($srcimg); break; ...

  10. php最快捷的插入数据,3000万仅需5秒

    <?phpheader('content-type:text/html;charset=utf-8');//采集数据$url="http://www.keepclub.com/club ...