当前位置: 首页 > news >正文

xtuoj 公共的数

公共的数

题目

思路

xi+1 = axi + b,当 a ==1 时,xi+1 - xi = b,后一项比前一项多b,即x数列构成等差数列,且首项是0,那么很容易知道x数列将全部都是b的倍数。同理,当c == 1 时,y数列也构成一个等差数列,y数列将全部都是d的倍数。当一次项系数不是1时,不构成等差数列,就是个一般数列。

显然可以分为以下四类
1.x、y都是等差数列
2.x是等差,y不是等差
3.x不是等差,y是等差
4.x、y都不是等差

注意这里首项是零,所以构成等差的话,数列一定是公差的倍数。

对于都是等差的情况,那么公共的数就是bd的公共的倍数,那么个数怎么判断呢,只需要用N/lcm(b,d)即可,其中lcm(b,d)bd的最小公倍数。

对于一个是等差,一个不是等差的情况,我们只需要枚举不是等差的项,判断其是否存在于等差数列中,这里只需取余公差等于0,则判定其是等差数列中的项,即公共项ans++

对于都不是等差的项,只能依次枚举x数列中的每个数,看其是否存在于y中,当在y中找到x时,不可能再找到别的y使其等于当前的x了,因为数列是递增的,那么就跳出y数列,继续枚举下一个x

代码里面要说的几个点,当需要枚举y数列时,采用while(y<=N),这是因为题目要求公共的数在[1,109]之间,这里N我提前设置好了为109,什么时候我们可以提前终止循环,当cy>N时,那么cy+d必然>N,但是为了防止整数溢出,我们写成y>N/c

有人可能会问为什么不写cy+d>N呢,这是因为cy+d>N就是你下一个y>N,那么其实就是while的条件判断,所以这里没必要了。

之后我们在把下一个y的值赋值给当前这个y,也就是进行下一个y的判断。

当两个数列都不是等差数列时,我们在y数列中找到对应相等的x之后就可以跳出循环了,这是因为我们的y数列是递增数列,后续不可能再存在与当前x相等的y了。

代码

#include<stdio.h>
#define N 1000000000int gcd(int a,int b
http://www.dtcms.com/a/508698.html

相关文章:

  • 删除西部数码网站管理助手嘟嘟嘟在线视频免费观看
  • 做网站要会写代码吗网站建设硬件投入表
  • 有官网建手机网站吗做自己域名的网站很贵吗
  • 网站建设方案书含合同做网站 内网怎么映射
  • jmeter性能测试完美入门
  • 余姚做网站的公司建筑人才网平台
  • 娱乐类网站wordpress男同
  • VSCode 配置 SSH 远程连接
  • 网站 主办单位性质 个人眉山建行网站
  • 网站建设与运营未来发展西安网站建设那家强
  • 134.FPGA常见管脚与时钟的约束方法
  • 宝安建网站多少钱wordpress本地打开慢
  • 国内开源代码网站传奇游戏开发
  • 新手做网站的几个必要步骤工作室图片 实拍
  • 中断NVIC
  • 自己也可以免费轻松创建一个网站营销网站制作
  • 苏州建网站多少钱网站访客跟踪
  • C标准库 - `<float.h>》详解
  • 解密 Vercel AI SDK:构建下一代 AI 应用的终极武器库
  • 开发网站语言推推蛙seo
  • 七宝做网站ps做电商网站图标
  • [css] flex布局中的英文字母不换行问题
  • wordpress爬虫采集惠州seo排名公司
  • 电白区建设局网站社交网站怎么做
  • 5 款 PDF 翻译工具深度测评:从格式到免费权限全解析
  • flash-attention连环问答--softmax 、safe softmax 、online softmax
  • 温州网站建设企业包装回收网站建设
  • 有没有做彩票直播的网站做一个网站开发项目有哪些阶段
  • 网站建设沛宣跨境电商自建站是什么意思
  • 降水数据下载:GSMaP卫星 1998-2025年 逐小时、逐天、逐月 0.1°空间分辨率