CERC2017 F: Faulty Factorial 简单数论题
1 #include <iostream> 2 using namespace std; 3 #define ll long long 4 const int N = 10000006; 5 ll n,p,r; 6 ll poww(ll a,ll b){ 7 ll ans =1ll; 8 while(b){ 9 if(b&1) ans =ans*a%p; 10 b>>=1; 11 a=a*a%p; 12 } 13 return ans%p; 14 } 15 int main() 16 { 17 //每次都要注意-1 -1的情况 18 scanf("%lld%lld%lld",&n,&p,&r); 19 if(n>=2*p){ 20 if(r==0){ 21 printf("%lld 1\n",p+1); 22 } 23 else{ 24 printf("-1 -1\n"); 25 } 26 } 27 else if(n>=p){ 28 if(r==0){ 29 int flag =0; 30 for(ll i=2;i<=n;i++){ 31 if(i!=p)//起初if的{}写错了 32 { 33 printf("%lld 1\n",i); 34 flag =1; 35 break; 36 } 37 } 38 if(!flag)printf("-1 -1\n"); //n=p=2 39 } 40 else{ 41 ll ans=1ll; 42 for(ll i=2;i<=n;i++) { 43 if(i!=p) ans =ans*i%p; 44 } 45 int flag =0; 46 for(ll i=1;i<p;i++){ 47 if(ans*i%p==r) { 48 printf("%lld %lld\n",p,i); 49 flag =1; 50 break; 51 } 52 } 53 if(flag==0) printf("-1 -1\n"); 54 } 55 } 56 else{ 57 ll ans =1ll; 58 for(ll i=2;i<=n;i++) ans =ans*i%p; 59 int flag =0; 60 ans = poww(ans,p-2);//放到里面会超时 61 for(ll i=2;i<=n;i++){ 62 ll x= r*i%p*ans%p; 63 // ans/i*x%p==r 64 // x=r*i%p/ans%p; 65 if(x>=1&&x<i){ 66 printf("%lld %lld\n",i,x); 67 flag =1; 68 break; 69 } 70 } 71 if(!flag) printf("-1 -1\n"); 72 } 73 return 0; 74 75 }
分类:
A数论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现