【CODECHEF】【phollard rho + miller_rabin】The First Cube
All submissions for this problem are available.
Read problems statements in Mandarin Chinese and Russian.
This problem's statement is really a short one.
You are given an integer S. Consider an infinite sequence S, 2S, 3S, ... . Find the first number in this sequence that can be represented as Q3, where Q is some positive integer number. As the sought number could be very large, please print modulo (109 + 7).
The number S will be given to you as a product of N positive integer numbers A1, A2, ..., AN, namely S = A1 * A2 * ... * AN
Input
The first line of the input contains an integer T denoting the number of test cases. The description of T test cases follows.
The first line of each test case contains an integer N.
Then there is a line, containing N space separated integers, denoting the numbers A1, A2, ..., AN.
Output
For each test case, output a single line containing the first term of the sequence which is the perfect cube, modulo 109+7.
Constraints
- 1 ≤ T ≤ 10
- (Subtask 1): N = 1, 1 ≤ S ≤ 109 - 15 points.
- (Subtask 2): N = 1, 1 ≤ S ≤ 1018 - 31 point.
- (Subtask 3): 1 ≤ N ≤ 100, 1 ≤ Ai ≤ 1018 - 54 points.
Example
Input:
2
2
2 2
2
2 3
Output:
8
216
Explanation
Example case 1. First few numbers in the infinite sequence 4, 8, 12, 16, 20, , etc. In this sequence, 8 is the first number which is also a cube (as 23 = 8).
Example case 2. First few numbers in the infinite sequence 6, 12, 18, 24, , etc. In this sequence, 216 is the first number which is also a cube (as 63 = 216).
【分析】
挺模板的东西,就当复习一下了。
/*
宋代李冠
《蝶恋花·春暮》
遥夜亭皋闲信步。
才过清明,渐觉伤春暮。
数点雨声风约住。朦胧淡月云来去。
桃杏依稀香暗渡。
谁在秋千,笑里轻轻语。
一寸相思千万绪。人间没个安排处。
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <iostream>
#include <string>
#include <ctime>
#include <map>
#define LOCAL
const int MAXN = + ;
const long long MOD = ;
const double Pi = acos(-1.0);
long long G = ;//原根
const int MAXM = * + ;
using namespace std;
typedef long long ll;
ll read(){
ll flag = , x = ;
char ch;
ch = getchar();
while (ch < '' || ch > '') {if (ch == '-') flag = -; ch = getchar();}
while (ch >= '' && ch <= '') {x = x * + (ch - ''); ch = getchar();}
return x * flag;
}
map<ll, int>Num;//记录个数
ll data[MAXN];
ll n; ll mul(ll a, ll b, ll c){//又要用快速乘QAQ
if (b == ) return 0ll;
if (b == ) return a % c;
ll tmp = mul(a, b / , c);
if (b % == ) return (tmp + tmp) % c;
else return (((tmp + tmp) % c) + (a % c)) % c;
}
ll pow(ll a, ll b, ll c){
if (b == ) return 1ll;
if (b == ) return a % c;
ll tmp = pow(a, b / , c);
if (b % == ) return mul(tmp, tmp, c);
else return mul(mul(tmp, tmp, c), a, c);
}
bool Sec_check(ll a, ll b, ll c){
ll tmp = pow(a, b, c);
if (tmp != && tmp != (c - )) return ;
if (tmp == (c - ) || (b % != )) return ;
return Sec_check(a, b / , c);
}
//判断n是否是素数
bool miller_rabin(ll n){
int cnt = ;
while (cnt--){
ll a = (ll)rand() % (n - ) + ;
if (!Sec_check(a, n - , n)) return ;
}
return ;
}
ll gcd(ll a, ll b){return b == 0ll ? a : gcd(b, a % b);}
ll pollard_rho(ll a, ll c){
ll i = , k = ;
ll x, y, d;
x = (ll)((double)(rand() / RAND_MAX) * (a - ) + 0.5) + 1ll;
y = x;
while (){
i++;
x = (mul(x, x, a) % a + c) % a;
d = gcd(y - x + a, a);
if (d > && d < a) return d;
if (y == x) return a;//失败
if (i == k){
k <<= ;
y = x;
}
}
}
void find(ll a, ll c){
if (a == ) return;
if (miller_rabin(a)){
Num[a]++;
return;
}
ll p = a;
while (p >= a) pollard_rho(a, c--);
pollard_rho(p, c);
pollard_rho(a / p, c);
}
void init(){
Num.clear();
scanf("%d", &n);
for (int i = ; i <= n; i++) {
data[i] = read();
find(data[i], );
}
}
void work(){
ll Ans = ;
for (int i = ; i <= n; i++) Ans = (Ans * data[i]) % MOD;
for (map<ll, int>::iterator it = Num.begin(); it != Num.end(); it++){
it->second %= ;
if (it->second){
for (int i = it->second; i < ; i++) Ans = (Ans * ((it->first) % MOD)) % MOD;
}
}
printf("%lld\n", Ans);
} int main(){
int T; scanf("%d", &T);
while (T--){
init();
work();
}
return ;
}
【CODECHEF】【phollard rho + miller_rabin】The First Cube的更多相关文章
- 最短路(模板)【CodeChef CLIQUED,洛谷P3371】
自TG滚粗后咕咕咕了这么久,最近重新开始学OI,也会慢慢开始更博了.... 最短路算法经典的就是SPFA(Bellman-Ford),Dijkstra,Floyd: 本期先讲两个经典的单源最短路算法: ...
- 【CodeChef】Querying on a Grid(分治,最短路)
[CodeChef]Querying on a Grid(分治,最短路) 题面 Vjudge CodeChef 题解 考虑分治处理这个问题,每次取一个\(mid\),对于\(mid\)上的三个点构建最 ...
- 【CodeChef】Palindromeness(回文树)
[CodeChef]Palindromeness(回文树) 题面 Vjudge CodeChef 中文版题面 题解 构建回文树,现在的问题就是要求出当前回文串节点的长度的一半的那个回文串所代表的节点 ...
- HDU1164_Eddy's research I【Miller Rabin素数测试】【Pollar Rho整数分解】
Eddy's research I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 【CodeChef】Find a special connected block - CONNECT(斯坦纳树)
[CodeChef]Find a special connected block - CONNECT(斯坦纳树) 题面 Vjudge 题解 还是一样的套路题,把每个数字映射到\([0,K)\)的整数, ...
- 【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
http://blog.csdn.net/poem_qianmo/article/details/26977557 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...
- 【OpenCV新手教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...
- 【Knockout.js 学习体验之旅】(3)模板绑定
本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
- 【Knockout.js 学习体验之旅】(2)花式捆绑
本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
随机推荐
- POJ 1579 Function Run Fun
简单动态规划,详细代码网上有!
- 查看Linux下*.a库文件中文件、函数、变量
查看Linux下*.a库文件中文件.函数.变量等情况在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包 含哪些文件.函数.变量: 1. 查看文件:ar -t xxx.a 2. ...
- jsp <c:forEach> 判断第一条 或 最后一条记录
<c:forEach>标签具有以下一些属性: var:迭代参数的名称.在迭代体中可以使用的变量的名称,用来表示每一个迭代变量.类型为String. items:要进行迭代的集合.对于它所支 ...
- Oracle- 用户管理
Oracle一个数据库里可以分配多个用户,用户创建自己的表,自己创建的表如果不想分配给其他用户使用,其他用户是看不到自己的创建的表的. 用户管理: 创建用户: create user chunxiao ...
- Runtime 函数 Swizzling 改变OC方法的调度顺序
首先加入一个小知识: SEL.Method.IMP的含义及区别 在运行时,类(Class)维护了一个消息分发列表来解决消息的正确发送.每一个消息列表的入口是一个方法(Method),这个方法映射了一对 ...
- .net如何自定义config配置文件节点
本文转载:http://www.cnblogs.com/lori/archive/2013/04/03/2997617.html 对于小型项目来说,配置信息可以通过appSettings进行配置,而如 ...
- [Ember] Creating Your First Ember.js Project with Ember-CLI
In this lesson, we'll setup Ember-CLI and use it to create and run our first Ember.js project. Insta ...
- Android开发之Bitmap二次采样
Bitmap二次采样,听着好像是一个高大上的事,其实也就那么回事,今天我们就来看看Bitmap的二次采样问题. 1.为什么要二次采样 OK,那么首先我要 解决的一个问题就是为什么我们要二次采样? 不知 ...
- arcgis 获得路径和环境变量信息
import arcpy import sysimport osimport string reload(sys) sys.setdefaultencoding("utf8")sc ...
- asp.net分页控件库
AspNetPager分页控件 AspNetPager分页控件解决了分页中的很多问题,直接采用该控件进行分页处理,会将繁琐的分页工作变得简单化,下面是我如何使用AspNetPager控件进行分页处理的 ...