模板和题解

复习了一下 exlucas的模板,结果写挂四次(都没脸说自己以前写过

是该好好反思一下呢~

错的原因如下:

第一次WA:求阶乘的时候忘了递归处理(n/p)!

第二次WA:求阶乘时把p当成循环节了,循环节应该是(p^k)

第三次WA:把循环节改成(p^k)后,干脆把递归处理(n/p)!改成了递归处理(n/(p^k))! (智障

第四次WA:求(p^k)的逆元直接用(p^k)^(mod-2),然而(p^k)不一定是质数,不能用费马小定理,应该用exgcd求逆元

就因为这几个错误花了我两个小时的时间,其实主要原因是自己没想清楚,连exlucas式子都推错,看题解也太心急了没认真看,导致自己反复错。

还有就是自己数论的基础太差,比如第四次错误就想当然以为(p^k)的逆元是它的(mod-2)次方,连费马小定理的条件都忘了

(PS:好像luogu上此题开O2会全T?相同的代码不开O2都过了)

代码:

 #include<bits/stdc++.h>
using namespace std;
#define N 107
#define ll long long
ll p2(ll x,ll mod)
{
return x*x%mod;
}
ll pw(ll x,ll p,ll mod)
{
return p?p2(pw(x,p/,mod),mod)*(p&?x:)%mod:;
}
ll fun(ll n,ll p)
{
if(n<p)return ;
return fun(n/p,p)+n/p;
}
ll exfac(ll n,ll p,ll mod)
{
if(n==)return ;
ll i,mul=;
for(i=;i<=mod;i++)
if(i%p!=)mul=mul*i%mod;
ll ans=pw(mul,n/mod,mod);
ll rest=n%mod;
for(i=;i<=rest;i++)
if(i%p!=)ans=ans*i%mod;
return ans*exfac(n/p,p,mod)%mod;
}
ll exgcd(ll x,ll y,ll &a,ll &b)
{
ll z;
return y?(z=exgcd(y,x%y,b,a),b-=a*(x/y),z):(a=,b=,x);
}
ll getinv(ll a,ll p)
{
ll x,y;
exgcd(a,p,x,y);
x=(x%p+p)%p;
}
ll exlucas(ll n,ll m,ll p,ll mod)
{
ll ans=exfac(n,p,mod);
ans=ans*getinv(exfac(m,p,mod),mod)%mod;
ans=ans*getinv(exfac(n-m,p,mod),mod)%mod;
ll times=fun(n,p)-fun(m,p)-fun(n-m,p);
ans=ans*pw(p,times,mod)%mod;
return ans;
}
ll a[N],b[N],cnt;
void getans(ll n,ll m,ll p)
{
ll t=sqrt(p),i,x=p;
for(i=;i<=p;i++)
{
if(x%i==)
{
ll mod=;
while(x%i==)x/=i,mod*=i;
ll res=exlucas(n,m,i,mod);
//printf("%lld\n",res);
a[++cnt]=res,b[cnt]=mod;
}
}
}
int main()
{
ll n,m,p,i;
scanf("%lld%lld%lld",&n,&m,&p);
getans(n,m,p);
ll ans=;
for(i=;i<=cnt;i++)
{
ll M=p/b[i];
ll x=a[i]*M%p*getinv(M,b[i])%p;
ans=(ans+x)%p;
}
printf("%lld\n",ans);
return ;
}

exlucas易错反思的更多相关文章

  1. JavaScript易错知识点整理

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

  2. JavaScript 易错知识点整理

    本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES ...

  3. Java五道输出易错题解析(避免小错误)

    收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注意下就OK了. 1. 看不见的空格? 下面的输出会正常吗? package basic; public class Integ ...

  4. 细节!重点!易错点!--面试java基础篇(二)

    今天来给大家分享一下java的重点易错点第二部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.字符串创建与存储机制:当创建一个字符串时,首先会在常量池中查找是否已经有相同的字符串被定义,其判断 ...

  5. 细节!重点!易错点!--面试java基础篇(一)

    今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的. 2.任何静态代码块都会在ma ...

  6. [SQLXML]FOR XML语法导出XML的易错之处

    原文:[SQLXML]FOR XML语法导出XML的易错之处 [SQLXML]FOR XML语法导出XML的易错之处 Version Date Creator Description 1.0.0.1 ...

  7. JavaScript易错点转载

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

  8. PHP数据访问易错点(20161030)

    易错点: 1.造对象的时候括号里面的参数 写错了 $db = new MySQLi("localhost","root","789",&qu ...

  9. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

随机推荐

  1. Unity AsyncGPUReadback 接口测试

    Unity2018新加入了该接口,可以做到异步RenderTexture->像素数据和异步的ComputeBuffer.GetData 那么写了几个例子来测试下. 1.RenderTexture ...

  2. 错误排查:Cloudera Manager Agent 的 Parcel 目录位于可用空间小于 10.0 吉字节 的文件系统上。 /opt/cloudera/parcels

    临时解决办法: 点击右上角的抑制,选中抑制复选框,然后重启服务即可.

  3. Java3-5年经验面试题总结

    记录一下本次找工作所遇到的一些高频面试题,第一次找java工作,感觉比面试.net舒服多了,17年的时候出去找.net工作,由于在公司做的东西用到的技术少,除了mvc和ef,其他没啥问的,就追着项目问 ...

  4. python基础--数据结构之字典

    字典 特点:无序,键唯一 目录 1.字典的创建 2. .setdefault 的使用 3.  字典中的查找 4.字典中的改 5. 字典中的删除 6. 打印字典的方法 7. 格式化字符串 8. 合并字符 ...

  5. Vue相关知识点记录

    1.安装 vue不支持ie8以下版本(无法模拟ECMAScript5特性),支持所有兼容ECMAScript5的浏览器. 浏览器安装Vue Devtools, 可以在更友好的界面中审查和调试Vue应用 ...

  6. Node.js 连接 MySQL数据库

    安装指令:npm install mysql var mysql = require("mysql");console.log(mysql); // 创建链接对象 var conn ...

  7. 输入url之后经历什么?

    一.浏览器查找输入域名的IP地址(拿到 IP) 1.查找浏览器缓存(浏览器一般会缓存DNS记录一段时间,一般为2-30分钟). 2.查找系统缓存(即hosts文件,有没有对应的IP) 3.以上都没有的 ...

  8. Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别

    Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别

  9. 2007英语CET6四6级资料六级大学单词

    anticipation n. 预期,期望 appreciation n. 感谢,感激 array n. 陈列,一系列 assurance n. 保证 emergency n. 紧急情况 encour ...

  10. ip黑名单-做过ssh扫描黑的ip

    # # hosts.deny This file contains access rules which are used to # deny connections to network servi ...