AcWing 数学知识

news2024/10/5 17:16:55

质数

模板:

// 试除法判断质数
bool is_prime(int x)
{
    if (x < 2) return false;
    //只需枚举一部分 使得 i<= x / i, 时间复杂度为√n
    for (int i = 2; i <= x / i; i ++ )
        if (x % i == 0)
            return false;
    return true;
}

// 试除法分解质因数
void divide(int n)
{
    for (int i = 2; i <= n / i; i++)
    {
        if (n % i == 0)
        {
            int cnt = 0;
            while (n % i == 0)
            {
                n /= i;
                cnt++;
            }
            printf("%d %d\n", i, cnt);
        }
    }
    
    //本身就是质数
    if (n > 1) printf("%d %d\n", n, 1);
    printf("\n");
}

// 

试除法判定质数

在这里插入图片描述
代码:

#include<iostream>
using namespace std;
int n;

bool is_prime(int x)
{
    if (x == 1) return false;
    for (int i = 2; i <= x / i; i++)
    {
        if (x % i == 0) return false;
    }
    
    return true;
}

int main()
{
    scanf("%d", &n);
    while (n--)
    {
        int a;
        scanf("%d", &a);
        printf(is_prime(a) ? "Yes\n" : "No\n");
    }
    return 0;
}

分解质因数

在这里插入图片描述
代码:

#include<iostream>
using namespace std;

void divide(int n)
{
    for (int i = 2; i <= n / i; i++)
    {
        if (n % i == 0)
        {
            int cnt = 0;
            while (n % i == 0)
            {
                n /= i;
                cnt++;
            }
            printf("%d %d\n", i, cnt);
        }
    }
    
    //本身就是质数
    if (n > 1) printf("%d %d\n", n, 1);
    printf("\n");
}

int main()
{
    int n;
    scanf("%d", &n);
    
    while (n--)
    {
        int a;
        scanf("%d", &a);
        divide(a);
    }
    
    return 0;
}

筛质数

在这里插入图片描述
思路:
筛法求质数,有两种方式:

  • 埃氏筛法
  • 线性筛法

埃氏筛法
埃氏筛法每次筛掉质数的倍数(大于等于2倍),这样最后剩下的就全是质数。 s t [ i ] st[i] st[i] f a l s e false false时,表示为质数。
在这里插入图片描述
埃氏筛法代码:

#include<iostream>
using namespace std;

const int N = 1000010;
bool st[N];
int primes[N];
int cnt;

void get_primes(int n)
{
    for (int i = 2; i <= n; i++)
    {
        if (!st[i]) primes[cnt++] = i;
        for (int j = i + i; j <= n; j += i) st[j] = true;
    }
}

int main()
{
    int n;
    cin >> n;
    get_primes(n);
    cout << cnt << endl;
    
    return 0;
}

线性筛法
线性筛法保证 n n n只会被最小质因子筛掉。

  • i % primes[j] == 0primes[j]i的最小质因子,primes[j]primes[j] * i的最小质因子。
  • i % primes[j] != 0primes[j]小于i的最小质因子,primes[j]primes[j] * i的最小质因子。
bool st[N];
int primes[N];
int cnt;

void get_primes(int n)
{
    for (int i = 2; i <= n; i++)
    {
        if (!st[i]) primes[cnt++] = i;
        for (int j = 0; primes[j] <= n / i; j ++) 
        {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) break;
        }
            
    }
}

线性筛法代码:

#include<iostream>
using namespace std;

const int N = 1000010;
bool st[N];
int primes[N];
int cnt;

void get_primes(int n)
{
    for (int i = 2; i <= n; i++)
    {
        if (!st[i]) primes[cnt++] = i;
        for (int j = 0; primes[j] <= n / i; j ++) 
        {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) break;
        }
            
    }
}

int main()
{
    int n;
    cin >> n;
    get_primes(n);
    cout << cnt << endl;
    
    return 0;
}

约数

试除法求约数

在这里插入图片描述
代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n;

void get_divisors(int a)
{
    vector<int> res;
    for (int i = 1; i <= a / i; i++)
    {
        if (a % i == 0)
        {
            res.push_back(i);
            // 防止平方根多次出现
            if (i != a / i) res.push_back(a / i);
        }
    }
    
    //从大到小排序
    sort(res.begin(), res.end());
    
    for (int t : res) printf("%d ", t);
    printf("\n");
    
}

int main()
{
    scanf("%d", &n);
    while (n--)
    {
        int a;
        scanf("%d", &a);
        get_divisors(a);
    }
    return 0;
}

约数个数

在这里插入图片描述
思路:
给定一个数 N N N p i p_i pi N N N的质约数,则可以表示为:
N = p 1 α 1 × p 2 α 2 × p 3 α 3 × . . . × p k α k N=p_{1}^{\alpha_1}\times p_{2}^{\alpha_2} \times p_{3}^{\alpha_3}\times... \times p_{k}^{\alpha_k} N=p1α1×p2α2×p3α3×...×pkαk
N N N的每一个约数 d i d_i di,可以表示为:
d i = p 1 β 1 × p 2 β 2 × p 3 β 3 × . . . × p k β k d_i=p_{1}^{\beta_1}\times p_{2}^{\beta_2} \times p_{3}^{\beta_3}\times... \times p_{k}^{\beta_k} di=p1β1×p2β2×p3β3×...×pkβk
其中, 0 ≤ β i ≤ α i 0 \le \beta_i \le \alpha_i 0βiαi β i \beta_i βi的选法有 0 ∼ α i 0 \sim \alpha_i 0αi,共有 ( α i + 1 ) (\alpha_i + 1) (αi+1)种选法 ,根据排列组合原理,约数个数为:
( α 1 + 1 ) × ( α 2 + 1 ) × ( α 3 + 1 ) × . . . × ( α k + 1 ) (\alpha_1 + 1) \times (\alpha_2 + 1) \times (\alpha_3 + 1) \times ... \times (\alpha_k + 1) (α1+1)×(α2+1)×(α3+1)×...×(αk+1)

依次遍历 a i a_i ai,求 a i a_i ai的质因数以及每个质因数的个数,可以用哈希表保存结果
在这里插入图片描述
代码:

#include<iostream>
#include<unordered_map>
using namespace std;

const int mod = 1e9 + 7;


int main()
{
    int n;
    cin >> n;
    unordered_map<int, int> primes;
    while (n--)
    {
        int x;
        cin >> x;
        for (int i = 2; i <= x / i; i++)
        {
            while (x % i == 0)
            {
                x /= i;
                primes[i]++;
            }
        }
        if (x > 1) primes[x]++;
    }
    
    long long res = 1;
    
    for (auto prime : primes) 
    	res = res * (prime.second + 1) % mod;
    
    cout << res << endl;
    
    return 0;
}

约数之和

在这里插入图片描述
思路:
根据约数个数的思路,约数之和为 d 1 + d 2 + d 3 + . . . + d k     ① d_1 + d_2 + d_3 + ... + d_k \: \: \: ① d1+d2+d3+...+dk
其中, d i = p 1 β 1 × p 2 β 2 × p 3 β 3 × . . . × p k β k     ② d_i=p_{1}^{\beta_1}\times p_{2}^{\beta_2} \times p_{3}^{\beta_3}\times... \times p_{k}^{\beta_k} \: \: \: ② di=p1β1×p2β2×p3β3×...×pkβk
约数之和为 ( p 1 0 + p 1 1 + p 1 2 . . . + p 1 α 1 ) . . . ( p k 0 + p k 1 + p k 2 . . . + p k α k ) (p_1^0+p_1^1+p_1^2...+p_1^{\alpha_1})...(p_k^0+p_k^1+p_k^2...+p_k^{\alpha_k}) (p10+p11+p12...+p1α1)...(pk0+pk1+pk2...+pkαk)
展开可得式①,展开的每一项均为 d i d_i di

( p i 0 + p i 1 + p i 2 . . . + p i α 1 ) (p_i^0+p_i^1+p_i^2...+p_i^{\alpha_1}) (pi0+pi1+pi2...+piα1)可以按照下面的方式进行推导:
t 0 = 1 t_0 = 1 t0=1
t 1 = t 0 × p + 1 = p + 1 t_1 = t_0 \times p + 1 = p + 1 t1=t0×p+1=p+1
t 2 = t 1 × p + 1 = p 2 + p + 1 t_2 = t_1 \times p + 1 = p^2 + p + 1 t2=t1×p+1=p2+p+1

t α i = t α i − 1 × p + 1 = p α i + p α i − 1 + . . . + p + 1 t_{\alpha_i }= t_{\alpha_i-1} \times p + 1 = p^{\alpha_i } + p^{\alpha_i-1} +... + p + 1 tαi=tαi1×p+1=pαi+pαi1+...+p+1
最后计算 ∏ i = 1 n t α i \displaystyle\prod _{i=1}^n t_{\alpha_i} i=1ntαi,即为约数之和。
在这里插入图片描述

代码:

#include<iostream>
#include<unordered_map>
using namespace std;

const int mod = 1e9 + 7;


int main()
{
    int n;
    cin >> n;
    unordered_map<int, int> primes;
    while (n--)
    {
        int x;
        cin >> x;
        for (int i = 2; i <= x / i; i++)
        {
            while (x % i == 0)
            {
                x /= i;
                primes[i]++;
            }
        }
        if (x > 1) primes[x]++;
    }
    
    long long res = 1;
    
    for (auto prime : primes) 
    {
        long long t = 1;
        int p = prime.first, a = prime.second;
        while (a--) t = (t * p + 1) % mod;
        res = res * t % mod;
    }
    
    cout << res << endl;
    
    return 0;
}

最大公因数

在这里插入图片描述
思路:
欧几里得算法,辗转相除法。
代码:

#include<iostream>
using namespace std;

int gcd(int m, int n)
{
    return m % n == 0 ? n : gcd(n, m % n);
}

int main()
{
    int n;
    cin >> n;
    while (n--)
    {
        int a, b;
        cin >> a >> b;
        cout << gcd(a, b) << endl;
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

免费的 AI 动作捕捉工具 #Rokoko Video

创建动画可能很棘手&#xff0c;但使用对了技术和工具&#xff0c;可以轻松实现看起来很棒且功能流畅的完美动画。“ 为每个创作者配备动捕的力量。”近期&#xff0c;Rokoko 通过推出免费的 AI 动作捕捉工具 Rokoko Video来兑现这一承诺。图片来源 &#xff1a;Rokoko为什么说…

CSS弹性盒子(flexbox)实用指南

CSS弹性盒子&#xff08;flexbox&#xff09;实用指南上一节&#xff1a;《CSS 浮动 及其应用 》| 下一节&#xff1a;《CSS网格布局&#xff08;grid&#xff09;实用指南 》jcLee95&#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 &#xff1…

复习:矩阵计算与自动求导

矩阵计算 矩阵计算就是讲矩阵如何求导数&#xff0c;所有优化模型的求解也是通过求导数实现的。 首先回忆初高中学习的导数知识&#xff0c;这属于标量的导数。 将导数拓展到不可微的情况&#xff0c;这就是亚导数。 将导数拓展到向量&#xff0c;这就是梯度。 向量对向量求…

java优化-代码重,让代码更优美和简洁

简言 在项目工作中&#xff0c;经常会有优化&#xff0c;有sql优化&#xff0c;项目架构优化&#xff0c;业务层优化&#xff0c;代码结构优化等&#xff0c;这些优化都是为了系统&#xff0c;易维护&#xff0c;易懂&#xff0c;易扩展。下面是我个人总结的一些经验分享与大家…

JavaScript 函数-函数概念,使用,函数参数,返回值,arguments的使用,函数的申明方式...

JavaScript 函数 目录JavaScript 函数1. 函数的概念2. 函数的使用2.1 声明函数2.2 调用函数2.3 函数的封装3. 函数的参数3.1 形参和实参3.2 函数参数的传递过程3.3 函数形参和实参个数不匹配问题4. 函数的返回值4.1 return 语句4.2 return 终止函数4.3 return 的返回值4.4 函数…

喜讯 | 代谢组学领航企业百趣生物完成数千万元A+轮融资!

2023年1月3日&#xff0c;国内代谢组学研究领航企业上海百趣生物医学科技有限公司&#xff08;以下简称“百趣生物”&#xff09;宣布完成数千万元A轮战略融资。本轮融资由金域医学集团及其参股基金科金金域领投&#xff0c;老股东启明创投跟投。 本次融资资金将用于推动公司结…

教育行业课程介绍话术

教育行业&#xff0c;吸引生源是很重要的一项工作&#xff0c;但是机构或企业能吸引到生源的前提一定是学员对于机构所授课程有强烈的兴趣。 前言 教育行业&#xff0c;吸引生源是很重要的一项工作&#xff0c;但是机构或企业能吸引到生源的前提一定是学员对于机构所授课程有强…

MyBatisPlus ---- 插件

MyBatisPlus ---- 插件1. 分页插件a>添加配置类b>测试2. xml自定义分页a>UserMapper中定义接口方法b>UserMapper.xml中编写SQLc>配置文件d>测试3. 乐观锁a>场景b>乐观锁与悲观锁c>模拟修改冲突d>乐观锁实现流程e>MyBatis-Plus实现乐观锁1. 分…

蓝牙耳机什么牌子性价比高?性价比最好的蓝牙耳机排行

近年来&#xff0c;蓝牙耳机越来越成为人们日常生活中常见的数码产品之一&#xff0c;逐渐地&#xff0c;看到更多的音频厂商、手机厂商加入蓝牙耳机市场中来。最近&#xff0c;看到很多人问&#xff0c;蓝牙耳机什么牌子性价比高&#xff1f;下面&#xff0c;我来给大家分享一…

浅谈map和unordered_map的应用场景

map和unordered_map的适用场景 底层结构介绍 map底层是红黑树结构unordered_map底层是哈希结构; Hash适用场景(unordered_map) 内存存角度来说hash因为底层维护了哈希表的存在&#xff0c;内存消耗远大于红黑树&#xff0c;但是因为哈希表增删查改时的直接映射&#xff0c…

OpenFeign服务接口调用

✨ OpenFeign服务接口调用OpenFeign & FeignFeign基本介绍OpenFeign基本介绍二者对比OpenFeign的使用新建Module&#xff1a;cloud-consumer-feign-order80pom依赖application.yml全局配置文件主启动类Service1. 业务逻辑接口FeignClient配置调用provider服务2. 新建Paymen…

第三十九讲:神州无线AC基础管理配置

瘦AP零配置上线&#xff0c;对AP的管理和配置都在AC上进行。AC的基础管理包括AC的无线地址指定及无线功能开启、AP的注册、AP用户数管理、自动信道调整等。 一、配置AC无线IP地址 设置静态的无线IP地址查看AC选取的无线IP地址3.开启无线功能 二、AP注册 1&#xff0e;二层模式…

【网络结构设计】11、E-LAN | 通过梯度传输路径来设计网络结构

文章目录一、背景二、方法2.1 网络设计策略2.2 Partial Residual Networks2.3 Cross Stage Partial Networks2.4 Efficient Layer Aggregation Network三、效果论文&#xff1a;Designing Network Design Strategies Through Gradient Path Analysis 代码&#xff1a;暂无 出…

微服务应用视角解读如何选择 K8s 的弹性策略

头&#xff1a;潘俊峰 前言 微服务架构的出现&#xff0c;拆分了庞大的单体应用&#xff0c;让业务之间的开发与协作变得更加灵活。当面临业务流量增加的场景时&#xff0c;往往需要对一些应用组件进行扩容。K8s 在应用层面提供了 HPA&#xff0c;围绕 HPA 开源社区延伸出了 …

SAP-FI模块 处理自动生成会计凭证增强

FICO-模块一. 相关问题概览1. 固定资产业务过渡科目摘要增强功能-F-022. 固定资产业务过渡科目摘要增强功能-MIGO3. 主营业务收入等科目自动反记账功能二. 问题图片描述1. 固定资产业务过渡科目摘要增强功能-F-022. 固定资产业务过渡科目摘要增强功能-MIGO3. 主营业务收入等科目…

JavaScript 作用域-作用域概述,变量作用域,作用域链

JavaScript 作用域-作用域概述&#xff0c;变量作用域&#xff0c;作用域链 目录JavaScript 作用域-作用域概述&#xff0c;变量作用域&#xff0c;作用域链1. 作用域1.1 作用域概述1.2 全局作用域1.3 局部作用域 (函数作用域)1.4 JS 没有块级作用域2. 变量的作用域2.1 变量作用…

校验和之概念、计算原理、检验原理、实例计算、代码编程,力荐力荐力荐

阅读前请看一下&#xff1a;我是一个热衷于记录的人&#xff0c;每次写博客会反复研读&#xff0c;尽量不断提升博客质量。文章设置为仅粉丝可见&#xff0c;是因为写博客确实花了不少精力。不用担心你关注我而我却不关注你&#xff0c;因为我是个诚信互关的人&#xff01;&…

如何用LightningChart创建Android图表数据可视化应用程序?(下)

LightningChart JS 是一款高性能的 JavaScript 图表工具&#xff0c;专注于性能密集型、实时可视化图表解决方案。 LightningChart .JS | 下载试用&#xff08;qun&#xff1a;740060302&#xff09;https://www.evget.com/product/4189/download 在上一篇&#xff0c;我们介…

CDN是什么?用了CDN就一定比不用更快吗?

对于开发同学来说&#xff0c;CDN这个词&#xff0c;既熟悉又陌生。 平时搞开发的时候很少需要碰这个&#xff0c;但却总能听到别人提起。 我们都听说过它能加速&#xff0c;也大概知道个原因&#xff0c;但是往深了问。 用了CDN就一定比不用更快吗&#xff1f; 就感觉有些…

Node.js操作Dom ,轻松hold住简单爬虫

前言 前段时间&#xff0c;我发现一个开源题库&#xff0c;题目非常有意思。我想把它整成一个JSON文件做为数据储备&#xff0c;方便整活。 一共有一百五十多道题目&#xff0c;手动CV我肯定是不想干的。于是写了个脚本&#xff0c;在写脚本的过程中&#xff0c;我发现一个能…