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

数论1.01

欧几里得(GCD,exGCD)

1.两个数除以最大公约数的结果互为质数

2.欧几里得算法(辗转相除法)求最大公约数

设a,b,c是不全为0的整数,满足1存在整数q,  a=bq+c,,那么(a,b)=(b,c)

其中c就等a%b

时间复杂度是log的

如果a*m=b*n(a|b*n==m)并且a和b互质,那么a就能整除b*n(其实是a能整除n);

0和任何一个数的最大公约数等于该数本身

至于为什么是下面这个代码咋这么求的:

我以我以及的理解写一遍

第一次:ax+by=gcd;

第二次:bx+(a%b)y=gcd

而a%b=a-a/b*b;

所以b*x+(a-a/b*b)*y=gcd;

bx+ay-a/b*b*y=gcd

ay+b*(x-a/b*y)=gcd;

两个红色字体相比不难看出对应的x,y是谁(从后往前推)

x=y,  y=x-a/b*y

如果ax+by=gcd

b=0,那么gcd=a,所以x=1,y=0;

#include<iostream>
#include<cstdio>
#include<cmath>using namespace std;int exgcd(int a,int b,int &x,int &y)//扩展欧几里得算法
{if(b==0){x=1;y=0;return a;  //到达递归边界开始向上一层返回}int r=exgcd(b,a%b,x,y);int temp=y;    //把x y变成上一层的y=x-(a/b)*y;x=temp;return r;     //得到a b的最大公因数
}

整数分解:

埃氏筛:O(nlog(log(n)))

用质数把质数的倍数筛掉

欧拉筛:O(n)

每个合数只需要被其最小的质因子筛掉

const int maxn = 101;   // 表长
int prime[maxn], pNum = 0;    // prime记录素数,pNum记录素数个数 
bool p[maxn] = {false};        // p记录当前数是否被筛去void eulerSieve(int n)    // 查找记录2-n的素数
{for (int i = 2; i <= n; i++){if (p[i] == false)  // 如果未被筛过,则为素数prime[pNum++] = i;for (j = 0; j < pNum; j++){if (i * prime[j] > n)      // 当要标记的合数超出范围时跳出break;p[i * prime[j]] = true;     // 将已经记录的素数的倍数进行标记if (i % prime[j] == 0)      //关键步骤break;}}
}

详细解释看这个:欧拉筛详解-CSDN博客挺详细的。

http://www.dtcms.com/a/302915.html

相关文章:

  • DAY-13 数组与指针
  • Linux应用程序的安装与管理
  • React入门
  • Docker笔记(基本命令、挂载本地gpu、Dockerfile文件配置、数据挂载、docker换源)
  • claude code
  • OSPF路由协议(上)
  • LangGraph实战:MCP + SSE实现远程调用MCP Server
  • 扩展和插件功能
  • 解决Echarts设置宽度为100%发现宽度变为100px的问题
  • 5 分钟上手 Firecrawl
  • [免费]【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)【论文+源码+SQL脚本】
  • Android中PID与UID的区别和联系(2)
  • Effective C++ 条款07:为多态基类声明virtual析构函数
  • 《深入理解priority_queue:的使用与模拟实现》
  • 教资科三【信息技术】— 学科知识: 第四章(计算机网络技术)
  • 如何在FastAPI中玩转Schema版本管理和灰度发布?
  • 【深度学习】SOFT Top-k:用最优传输解锁可微的 Top-k 操作
  • (二)Eshop(RabbitMQ手动)
  • 如何 5 分钟给英语视频加上中文字幕?
  • 2025.7.28总结
  • 学术论文写作心得笔记:如何避免“论文像实验报告”
  • 关于sql面试积累
  • [Linux]线程池
  • 【深度学习新浪潮】基于文字生成3D城市景观的算法有哪些?
  • 前端实现PDF在线预览的8种技术方案对比与实战
  • 软件设计师-知识点记录
  • WAIC 2025深度解析:当“养虎”警示遇上机器人拳击赛
  • 构建你的专属区块链:深入了解 Polkadot SDK
  • Java序列化与反序列化
  • 从零开始学习Dify-基于MCP的智能旅行规划助手下(九)