数论基础题目八题【欧几里得】【筛法素数】【中国剩余定理】

之前看的数论的知识,现在做几道题目找找感觉.....

poj 1061 传送门

题目大意,给你x,y,m,n,L。代表青蛙a的坐标x,青蛙b的坐标y,青蛙a一次跳的距离m,青蛙b一次跳的距离n,以及mod的值L,求经过多少次跳相遇。即求:(m-n)*x0=(x-y)(mod L);  模线性方程的解,不过要注意处理,因为(m-n)和(x-y)有可能是负的,如果(m-n)是负的,则直接对俩数取负数,下面就是对
((x-y)+L)%L。

然后就能用modular_linear_equation(LL a,LL b,LL n)函数了。

代码

poj 2142传送门

题目大意,给你abd是三个重量,ab是已知的重量,现在要求得出d,即m*a+n*b=d 求abs(m)+abs(n)的最大值,我们先用modular_linear_equation(LL a,LL b,LL n)函数得出一组特解,然后当m或者n最小的时候,得出响应的n或者m,求这两组中的最小值就是小的值了。

代码

poj 2689 传送门

题目详解

poj 2262 传送门

题目大意,任何一个偶数可以写成两个质数的和,给你一个100W以内的数c让你求出这个组合a+b=c,要求a尽量小,b尽量大。

100W的数据先打一个素数表就直接过了,裸题。

poj 1006 传送门

poj 2891 传送门

这中国剩余定理详见我的博客,后面有题解中国剩余定理

HDU 1222 传送门

题解

题目大意,给出 m和n。一个数是0,每次加上m,然后mod n,问能不能将0~n-1这些数字走完。

也就是列出方程a*x=b(mod n) 当b=0,1,2,3,4....n-1的时候是否有解,其实是一个想法题,我们先来看看扩展欧几里得算法:

//ax=b(mod n)
bool modular_linear_equation(LL a,LL b,LL n)
{
    LL x,y,x0,i;
    LL d=ex_gcd(a,n,x,y);
    if(b%d!=0)
        return false;
    x0=x*(b/d)%n;   //特解
    for(i=1;i<d;i++)  //解的个数是d
        printf("%d\n",(x0+i*(n/d))%n);
    return true;
}

其实也就是说当gcd(a*x,n)/ b!=0的时候无解b(0,1,2,3,4,...,n-1),也就是说gcd(a,n)==1的时候无解

HDU 1576 传送门

题解:传送门

题目大意,给出n,B,(n=A%9973),求出(A/B)%9973的值。

n=A-A/9973*9973,A=Bx,Bx-A/9973*9973=n。即Bx-9973y=n。最后求出x%9973的值即可。

扩展欧几里得,裸题,要是说难点在于之前的构造。

数论基础题目八题【欧几里得】【筛法素数】【中国剩余定理】

时间: 2025-01-16 02:19:58

数论基础题目八题【欧几里得】【筛法素数】【中国剩余定理】的相关文章

扩展欧几里得(ex_gcd),中国剩余定理(CRT)讲解 有代码

扩展欧几里得算法 求逆元就不说了. ax+by=c 这个怎么求,很好推. 设d=gcd(a,b) 满足d|c方程有解,否则无解. 扩展欧几里得求出来的解是 x是 ax+by=gcd(a,b)的解. 对于c的话只需要x*c/gcd(a,b)%(b/d)即可,因为b/d的剩余系更小. 为什么这样呢? 设a'=a/d,b'=b/d 求出a'x+b'y=1的解,两边同时乘d,然后x也是ax+by=d的解, 然后因为b'的剩余系更小,所以%b’ 中国剩余定理是合并线性方程组的 中国余数定理 转化为一个线性

总结——数论:欧几里得算法&amp;扩展欧几里得证明

一 欧几里得辗转相除法算法 设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),又因 r = a mod b,所以 gcd(a,b)=gcd(b,a mod b). 证明:①证明充分性. 设 d 为 a,b 的公约数,记作 d|a , d|b ,即a和b都可以被d整除 又因 r=a-kb , 两边同时除以d,r/d=a/d-kb/d=m,由等式右边可知m为整数, d|r , 即 d 是 (b,a mod b)的公约数, ②证明必要性 设 d 为 b, a mod b

【poj 1006】Biorhythms(数论--中国剩余定理 模版题){附【转】中国剩余定理 }

题意: 有 解法:中国剩余定理.定义为有 k 对关系:P % ai = bi,其中 ai 两两之间互质.(而两两之间不互质就是把原来的关系式化为:P = bi (mod ai) →  ai * x + bi = P,用拓展欧几里德求解同余方程组了.)    而 ai 两两互质时,可知道 a2*a3*...*ak = 1 (mod a1)  和  a1*a3*...*ak = 1 (mod a2) 等关系.那么想使 P % ai = bi ,就是要式子两边同乘 bi 了. 下面是转载的了~ 原博:

历届试题 买不到的数目(欧几里得 蓝桥杯)

</pre>  历届试题 买不到的数目  </h2><div id="prbinfos" style="font-family: verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 21px;"><h2 class="res" data-mce-style="text-align: center;"

2014年百度之星程序设计大赛 - 资格赛 1002 Disk Schedule(双调欧几里得旅行商问题)

Problem Description 有很多从磁盘读取数据的需求,包括顺序读取.随机读取.为了提高效率,需要人为安排磁盘读取.然而,在现实中,这种做法很复杂.我们考虑一个相对简单的场景.磁盘有许多轨道,每个轨道有许多扇区,用于存储数据.当我们想在特定扇区来读取数据时,磁头需要跳转到特定的轨道.具体扇区进行读取操作.为了简单,我们假设磁头可以在某个轨道顺时针或逆时针匀速旋转,旋转一周的时间是360个单位时间.磁头也可以随意移动到某个轨道进行读取,每跳转到一个相邻轨道的时间为400个单位时间,跳转

poj1006 ( hdu1370 ):中国剩余定理裸题

裸题,没什么好说的 第一个中国剩余定理 写暴力都过了..可见这题有多水 代码: #include<iostream> #include<stdio.h> #include<math.h> #include<string> #include<map> #include<algorithm> using namespace std; #define MAX 200000000 #define ull unsigned long long

数论杂谈——欧几里得算法及扩展欧几里得

数学是oi的重要基础,所以说数论在oi中占据了非常重要的地位,因此,学好数学,对于一个oier来说也是非常重要的. oi中的数学,其实也就和数竞并没有什么区别. 欧几里得法辗转相除法求最大公约数 我们可以证明gcd(a,b)=gcd(b,a%b),也就是我国古代数学智慧的结晶,更相损减术.并且一直递归下去,直到b的值为零,最大公约数值即为a.在这里就不给出详细证明了,大家可以代几个数据去验证它一下.谁叫我数学太菜. 代码如下 int GCD(int a,int b) { if(!b) { ret

数论之拓展欧几里得求解不定方程和同余方程组(一)

今天接到scy的压缩包,开始做数论专题.那今天就总结一下拓展欧几里得求解不定方程和同余方程组. 首先我们复习一下欧几里得算法: 1 int gcd(int a,int b){ 2 if(b==0) return a; 3 return gcd(b,a%b);4 } 拓展欧几里得算法: 推导过程: 给出A和B,求它们的最大公约数,并且求出x和y,满足Ax+By=gcd(A,B). 当A=0时,x=0,y=1; 当A>0时, 因为exgcd(A,B,x,y)表示Ax+By=gcd(A,B) 而且ex

拓展欧几里得详解 及其题目 POJ 1061 2115 2142 UVA 10673 10090

最近做了一些拓展欧几里得的题目呢,嘛,从一开始的不会到现在有点感觉,总之把我的经验拿出来和大家分享一下吧. 普通的欧几里得是用于解决求两个数a,b的gcd的,但是我们知道,gcd是线性组合 { ax+by | x,y∈Z }里的最小正元素(什么?不知道怎么来的?好吧...算法导论里数论算法那一章有证明),假若我们能够把这个x和y找出来,那么可以用来解决很多问题. (以下的gcd和lcm均指(gcd(a,b)和lcm(a,b)) 首先,假设ax+by=gcd这一个方程有一个特解x*,y*.那么显然