代码千万条,规范第一条

训练赛的时候打表找规律,发现答案是1/(st-pre-1)!,奈何用错了模板,一直TLE到比赛结束,一直以为是卡什么输入输出或者是两个素数相差太大导致复杂度过高,读入优化啥的都往上搞qaq,太菜了,没想到是mrt板子的锅qaq

题意:求解n!%p ,n为p前面第一个素数,p也为素数

代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int num;
#define ll long long
namespace io {
char buf[<<], *p1 = buf, *p2 = buf;
inline char gc() {
if(p1 != p2) return *p1++;
p1 = buf;
p2 = p1 + fread(buf, , << , stdin);
return p1 == p2 ? EOF : *p1++;
} #define G getchar template<class I>
inline void read(I &x) {
x = ; I f = ; char c = G();
while(c < '' || c > '') {if(c == '-') f = -; c = G(); }
while(c >= '' && c <= '') {x = x * + c - ''; c = G(); }
x *= f;
} template<class I>
inline void write(I x) {
if(x == ) {putchar(''); return;}
I tmp = x > ? x : -x;
if(x < ) putchar('-');
int cnt = ;
while(tmp > ) {
buf[cnt++] = tmp % + '';
tmp /= ;
}
while(cnt > ) putchar(buf[--cnt]);
} #define in(x) read(x)
#define outn(x) write(x), putchar('\n')
#define out(x) write(x), putchar(' ') } using namespace io;
const int times = ;
ll Random(ll n)//生成[ 0 , n ]的随机数
{
return ((double)rand()/RAND_MAX*n+0.5);
}
ll qpow(ll a, ll b, ll mod)//快速计算 (a*b) % mod
{
ll ans=;
while(b)
{
if(b&)
{
b--;
ans=(ans+a)%mod;
}
b/=;
a=(a+a)%mod;
}
return ans;
}
ll q_pow(ll a,ll b,ll mod)//快速计算 (a^b) % mod
{
ll ans=;
while(b)
{
if(b&)
{
ans=qpow(ans,a,mod );
}
b/=;
a=qpow(a,a,mod);
}
return ans;
}
bool witness(ll a,ll n)//miller_rabin算法的精华
{//用检验算子a来检验n是不是素数
ll tem=n-;
int j=;
while(tem%==)
{
tem/=;
j++;
}
//将n-1拆分为a^r * s
ll x=q_pow(a,tem,n); //得到a^r mod n
if(x==||x==n-) return true;//余数为1则为素数
while(j--) //否则试验条件2看是否有满足的 j
{
x=qpow(x,x,n);
if(x==n-)return true;
}
return false;
}
bool miller_rabin(ll n)//检验n是否是素数
{ if(n==)return true;
if(n<||n%==)return false;//如果是2则是素数,如果<2或者是>2的偶数则不是素数
for(register int i=;i<=times;i++)//做times次随机检验
{
ll a=Random(n-)+;//得到随机检验算子 a
if(!witness(a,n))return false;//用a检验n是否是素数
}
return true;
}
int main()
{
int t;
read(t);
while(t--)
{
long long int st;
read(st);
long long int pre=-;
if(st<=1e9+)
{
pre=;
}
else
{
for(long long i=st-;; i--)
{
//printf("%lld\n",i);
if(miller_rabin(i))
{
pre=i;
break;
}
}
}
//printf("%lld\n",pre);
long long int mm=st-pre;
long long int ans=;
for(long long int i=; i<mm; i++)
{
ans=((ans%st)*(i%st))%st;
}
long long int ss=q_pow(ans,st-,st);
outn(ss);
}
return ;
}

HDU 多校 第三场 Fansblog的更多相关文章

  1. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  2. hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测

    题意: 给你一个1e9-1e14的质数P,让你找出这个质数的前一个质数Q,然后计算Q!mod P 题解: 1e14的数据范围pass掉一切素数筛法,考虑Miller-Rabin算法. 米勒拉宾算法是一 ...

  3. hdu多校第三场

    Problem D. Euler Function 思路:打表找找规律. #include<bits/stdc++.h> #define LL long long #define fi f ...

  4. HDU 多校 第三场 Find the answer

    这题是原来cf上的一道原题,不过对于有一些数据范围修改了,不过还是很好想的 题意:给定一个长度为N的数组,对于数组中的每个位置,满足当前和小于M所需要去掉的最小代价 分析:对于当前是否需要进行去掉一些 ...

  5. hdu多校第三场 1007 (hdu6609) Find the answer 线段树

    题意: 给定一组数,共n个,第i次把第i个数扔进来,要求你删掉前i-1个数中的一些(不许删掉刚加进来这个数),使得前i个数相加的和小于m.问你对于每个i,最少需要删掉几个数字. 题解: 肯定是优先删大 ...

  6. HDU多校第三场 Hdu6606 Distribution of books 线段树优化DP

    Hdu6606 Distribution of books 题意 把一段连续的数字分成k段,不能有空段且段和段之间不能有间隔,但是可以舍去一部分后缀数字,求\(min(max((\sum ai ))\ ...

  7. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  8. 牛客多校第三场 F Planting Trees

    牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...

  9. 牛客多校第三场 G Removing Stones(分治+线段树)

    牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...

随机推荐

  1. RocketMQ(2)---Docker集群部署RocketMQ

    RocketMQ(2)-Docker集群部署RocketMQ =前言= 1.因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服 ...

  2. 分享Sql Server 2008 r2 数据备份,同步服务器数据(二.本地发布,订阅)

    上一篇文章中写到了数据库的本地备份,这一篇主要分享一下关于不同服务器的数据备份,主要是使用sql server中的本地发布,本地订阅功能,在数据库的读写分离中,也会经常性的用到这个功能. 复制-> ...

  3. jQuery-ajax-.get,.post方法

    在上一篇中详细介绍了jQuery中ajax局部方法$.load()的使用.下面来介绍两个全局方法$.get(),$.post()的使用. 1.这两个全局方法其实和上一篇中的$.load()方法使用是差 ...

  4. Axure中怎么制作锚点

    实现目标 点击导航条不同的菜单,页面跳到菜单相应的位置,实现页面自动滚动. 1.  拖入编辑区3个矩形,并相应命名为菜单1,菜单2 ,菜单3: 2.  再新建3个想要制作的文本框准备进行锚点滚动: 3 ...

  5. 前端笔记之React(三)使用动态样式表&antd&React脚手架&props实战

    一.使用动态样式表 1.1 LESS使用 全局安装Less npm install -g less 创建1.less文件,然后可以用lessc命令来编译这个文件: lessc 1.less 1.css ...

  6. Confluence迁移

    本次操作系统版本Centos7.3,Confluence版本5.9.9. 一.数据迁移 1.在旧Confluence上打包 “confluence和confluence-data”整个目录,默认安装的 ...

  7. Codeforces Gym101341I:Matrix God(随机化构造矩阵降维)***

    http://codeforces.com/gym/101341/problem/I 题意:给三个N*N的矩阵,问a*b是否等于c. 思路:之前遇到过差不多的题目,当时是随机行(点),然后验证,不满足 ...

  8. HDU 1074:Doing Homework(状压DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=1074 Doing Homework Problem Description Ignatius has just ...

  9. FluentValidation:一个非常受欢迎的,用于构建强类型验证规则的.NET 库

    1. FluentValidation:一个非常受欢迎的,用于构建强类型验证规则的.NET 库 请求参数实体定义: FluentValidation 验证类定义: 过滤器:ActionFilter中O ...

  10. C#中的委托和事件(下篇)

    上次以鸿门宴的例子写了一篇博文,旨在帮助C#初学者迈过委托和事件这道坎,能够用最快的速度掌握如何使用它们.如果觉得意犹未尽,或者仍然不知如何在实际应用中使用它们,那么,这篇窗体篇,将在Winform场 ...