同余方程的合并——codeforces338D
来源:互联网 发布:爱玩网络 编辑:程序博客网 时间:2024/05/14 07:18
#include<stdio.h>#include<algorithm>#include<iostream>#include<string.h>using namespace std;long long m[10002],n,M,lcm;int k;long long gcd(long long a,long long b){ return b?gcd(b,a%b):a;}long long egcd(long long a,long long b,long long &x,long long &y){ if(b==0) { x=1; y=0; return a; } long long gcd=egcd(b,a%b,y,x); y-=a/b*x; return gcd;}long long china(){ long long x,y,b=0,mm=m[0],d; for(int i=1;i<k;i++) { long long c=b+i; d=egcd(mm,m[i],x,y); if(c%d) return -1; long long t=m[i]/d; x=((c/d*x)%t+t)%t; if(x) x-=t; b-=mm*x; mm=mm/gcd(mm,m[i])*m[i]; } return b;}bool judge(){ if(lcm>n) return false; long long ans=china(); if(ans<0||ans>n) return false; if(ans==0) ans=lcm; if(ans+k-1>M) return false; for(int i=0;i<k;i++) if(gcd(lcm,ans+i)!=m[i]) return false; return true;}int main(){ int i; scanf("%I64d%I64d%d",&n,&M,&k); for(i=0;i<k;i++) scanf("%I64d",&m[i]); lcm=1; for(i=0;i<k;i++) { lcm=lcm/gcd(lcm,m[i])*m[i]; if(lcm>n) break; } judge()?puts("YES"):puts("NO");}
0 0
- 同余方程的合并——codeforces338D
- 【codevs1200】 NOIP2012—同余方程
- Poj2142解不定方程——一元线性同余
- 数论读书笔记——线性同余方程
- 同余方程——扩展欧几里得の板子
- 二次同余方程的解
- 二次同余方程的解
- 解线性同余方程的应用
- 解高次同余方程的应用
- 线性同余方程的求解
- 解高次同余方程的模板
- 一元线性同余方程的概述
- poj1061青蛙的约会 同余方程
- 线性同余方程
- 解同余方程
- 线性同余方程
- 线性同余方程
- 线性同余方程
- 【自学笔记】 原生JavaScript判断一个变量是否为数组,利用原型对象
- Neural style之torch学习笔记2: Torch与Matlab的语法对比
- 算法练习 - leetcode
- oracle snapshot too old异常
- 各种 好的 作品第三方
- 同余方程的合并——codeforces338D
- 减小Gcc编译程序的体积
- java.lang.IllegalArgumentException: Wrong state classs
- super-resolution技术日记——ESPCN
- 手机h5页面的mata
- docker 常用命令
- java吃肉!!
- VS2015编译lua源文件
- IOS系统历届版本大回顾(<iOS7)