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

2 月 3 日算法练习-数论

简单数论

在这里插入图片描述
思路:各个相邻数的差值求最大公约数得到 d,然后就能求出最少项数。
c++17用gcd,c++11 用_gcd

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 +10;
ll a[N];
int n;
int main( ){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    int d = 0;
    for(int i=1;i<n;i++)d = gcd(d,a[i+1]-a[i]);
    if(d==0)cout<<n<<'\n';
    else cout<<(a[n]-a[1])/d+1<<'\n';
    return 0;
}

最大比例

请添加图片描述
思路:思维题+数学,需要找到规律。先排序,然后去重,求前后两个数的最大公约数,来化简数组。然后将化简结果分别存在两个数组中表示分子和分母。分子分母分别进行更相减损术求最小的

#include<bits/stdc++.h>
using namespace std;
const int N = 1e2 +10;
int n,cnt;
long long a[N],u[N],d[N];

long long gcd_sub(long long a,long long b){
    if(a<b)swap(a,b);
    if(b==1)return a;
    return gcd_sub(b, a/b);
}

int main( ){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+1+n);
    for(int i=2;i<=n;i++){
        if(a[i]==a[i-1])continue;
        long long g = gcd(a[i],a[i-1]);
        u[++cnt]=a[i]/g;
        d[cnt]=a[i-1]/g;
    }
    long long x = u[1],y = d[1];
    for(int i=2;i<=cnt;i++){
        x=gcd_sub(x, u[i]);
        y=gcd_sub(y, d[i]);
    }
    cout<<x<<"/"<<y<<'\n';
    return 0;
}

http://www.kler.cn/a/228197.html

相关文章:

  • Git代码管理工具 — 5 GitHub远程仓库
  • FPGA中场战事
  • docker-registry
  • XX污水处理厂基于RK3576核心板应用(四)——人员倒地智能识别系统方案
  • Java 生成 PDF 文档 如此简单
  • 2024年智慧消防一体化安全管控年度回顾与2025年预测
  • 网络安全笔记
  • 假期刷题打卡--Day23
  • 蓝桥杯Web应用开发-display属性
  • 开源计算机视觉库OpenCV详细介绍
  • Ainx框架实现 一
  • spring boot3x登录开发-上(整合jwt)
  • Bagging的随机森林;Boosting的AdaBoost和GBDT
  • 【Kotlin】Kotlin环境搭建
  • 【用Unity开发一款横板跳跃游戏部分需要学习的技术点指南】
  • Python基础学习 -05-2 基本类型
  • 【蓝桥杯冲冲冲】[NOIP2001 普及组] 装箱问题
  • JAVA——Stream流
  • 【自然语言处理】P4 神经网络基础 - 激活函数
  • 802.11 MAC帧介绍
  • 洛谷 P1359 租用游艇
  • 【Spring连载】使用Spring Data访问Redis(十三)----支持类Support Classes
  • 软件架构风格:您的系统设计指南
  • istio 限流
  • 基于EdgeWorkers的边缘应用如何进行单元测试?
  • UE4 C++ 静态加载类和资源