acwing基础课——约数

news2024/11/18 14:42:24

由数据范围反推算法复杂度以及算法内容 - AcWing

常用代码模板4——数学知识 - AcWing

基本思想:

        首先,约数,又称因数。整数a除以整数b(b≠0)除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。在这里我们讨论四个问题:

(一)求一个数的所有约数——试除法

        暴力来解决这个问题很简单,就是从1开始遍历到n即可

for(int i = 1; i <= x; i++)
    {
        if(x % i == 0) res.push_back(i);
    }

时间复杂度为O(n),当处理m个数据时即为O(nm),所以当数据过多过大时时间效率较低,通过对质数的学习,我们知道一个数的因数即约数是成对出现的,所以我们同样可以用试除法,计算小的约数,并将大的约数添加到答案里,注意判断一下两者是否相同避免重复即可。

for(int i = 1; i <= x / i; i++)
            if(x % i == 0)
            {
                res.push_back(i);
                if(i != x/i) res.push_back(x/i);
            } 

869. 试除法求约数 - AcWing题库

给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含一个整数 ai。

输出格式

输出共 n 行,其中第 i 行输出第 i 个整数 ai 的所有约数。

数据范围

1≤n≤100,
2≤ai≤2×1e9

输入样例:

2
6
8

输出样例:

1 2 3 6 
1 2 4 8 
#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int n;

int main()
{
    cin>>n;
    
    while(n--)
    {
        int x;
        cin >> x;
        vector<int> res;
        
        for(int i = 1; i <= x / i; i++)
            if(x % i == 0)
            {
                res.push_back(i);
                if(i != x/i) res.push_back(x/i);
            } 
        
        sort(res.begin(), res.end());
        
        for (auto k : res) cout << k << ' ';
        cout << endl;
    }
    
    return 0;
}

(二)求一些数的乘积的约数个数

        我们可以将一个数写成质因数的乘积的形式,也就是

 那么这个数的约数个数就是

 粗略的讲一下原理,就是我们可以将因数再分解,将因数的通式写出来,那么n的约数个数和我们β取法的个数是相同的,对于任意一个βi有0到αi个选择,即αi+1种,那么我们所有的选择方案就是将每个βi可选择的方案数累乘组合起来即可,也就得到了我们的约数个数的式子。

 870. 约数个数 - AcWing题库

给定 n 个正整数 ai,请你输出这些数的乘积的约数个数,答案对 109+7 取模。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含一个整数 ai。

输出格式

输出一个整数,表示所给正整数的乘积的约数个数,答案需对 109+7 取模。

数据范围

1≤n≤100,
1≤ai≤2×1e9

输入样例:

3
2
6
8

输出样例:

12
#include<iostream>
#include<algorithm>
#include<unordered_map>

using namespace std;

const int mod = 1e9 + 7;
int n;

int main()
{
    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 p : primes) res = res * (p.second + 1) % mod; 
    
    cout << res;
    
    return 0;
}

(三)一些数的乘积的约数之和

        同样的,我们将N写成质因数乘积的形式,约数之和的式子就是

 逆推想好想,我们将这个式子展开,每一个括号里我们都有ai+1种选择,那么我们一共就有

也就是上一个问题约数的个数的式子,对于分解后的每一个式子,它所选取的括号里的每一个p也是不同的,即分解后的每一个乘积式子都可以看作一个数,这样我们就将所有约数的和求出了。

871. 约数之和 - AcWing题库

给定 n 个正整数 ai,请你输出这些数的乘积的约数之和,答案对 109+7 取模。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含一个整数 ai。

输出格式

输出一个整数,表示所给正整数的乘积的约数之和,答案需对 109+7 取模。

数据范围

1≤n≤100,
1≤ai≤2×1e9

输入样例:

3
2
6
8

输出样例:

252
#include<iostream>
#include<algorithm>
#include<vector>
#include<unordered_map>

using namespace std;

typedef long long LL;

const int mod = 1e9 + 7;
int n;

int main(){
    
    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]++;//x没除完
    }
    
    LL res = 1;
    
    for (auto prime : primes)
    {
        LL p = prime.first, a = prime.second;
        LL t = 1;
        while (a--) t = (t * p + 1) % mod;
        //还要算0次方,算0次方就直接加1了,然后从一次方算方便些
        /*计算一下:
        第一步:
        t = (t * a + 1)
        t=p1的一次方+p1的零次方;
        第二步:
        t = (t * a + 1)
        t=p1的二次方+p1的一次方+1=p1的二次方+p1的一次方+p1的零次方;
        */
        res = res * t % mod;
    }
    
    cout << res;
    
    return 0;
}

(四)最大公约数

        这里我们用到欧几里得算法,也叫辗转相除法,d能整除a和b,那么d同样能整除ax+by,例如3能整除6和9,3也能整除15,21,24,如此,a和b的最大公约数也就是b和a mod b的最大公约数,因此,我们辗转相除,直至a mod b 为 0 返回即可。

        对于a和b的最大公约数也就是b和a mod b的最大公约数的证明,a mod b可写作a - cb, (a, b) = (b, a - cb),我们反推,d能整除b和a - cb,那么d也能整除a - cb + xb,当x=c,a - cb + cb = a,即d也能整除a,所以是成立的。

 

 

872. 最大公约数 - AcWing题库

给定 n 对正整数ai,bi,请你求出每对数的最大公约数。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含一个整数对 ai,bi。

输出格式

输出共 n 行,每行输出一个整数对的最大公约数。

数据范围

1≤n≤1e5,
1≤ai,bi≤2×1e9

输入样例:

2
3 6
4 6

输出样例:

3
2
#include<iostream>

using namespace std;

const int N=100010;
int n;

int gcd(int a,int b)
{
    return b ? gcd(b, a % b) : a;
}

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

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

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

相关文章

怎样才能过好这一生?

文章目录1. 日拱一卒&#xff0c;功不唐捐1.1 适当的时候给自己一个奖励1.2 一个人可能走的更快&#xff0c;但一群人才能走的更远1.3 通过一些事情去逼自己一把1.4 从真理中去感悟1.5 当你面临绝路时2. 梦想的意义不在于实现3. 孤独4. 烦恼5. 别总说来日方长6. 忍和韧性7. 事情…

【linux kernel】linux内核重要函数 | do_initcalls

文章目录一、导读二、do_initcalls三、构造section并添加函数&#xff08;3-1&#xff09;构造初始化调用section&#xff08;3-2&#xff09;向section中添加函数四、总结一、导读 在linux内核启动过程中&#xff0c;会向终端打印出很多的日志信息&#xff0c;从这些日志信息…

c++开源协程库libgo介绍及使用

协程这个概念&#xff0c;最近这几年可是相当地流行了。尤其 go 语言问世之后&#xff0c;内置的协程特性&#xff0c;完全屏蔽了操作系统线程的复杂细节。甚至使 go 开发者“只知有协程&#xff0c;不知有线程”了。当然 C也有高性能的协程库&#xff0c;比如我了解到的微信的…

基于微信小程序的企业职工薪资查询系统小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…

卷积神经网络(CNN)详细介绍及其原理详解

文章目录前言一、什么是卷积神经网络二、输入层三、卷积层四、池化层五、全连接层六、输出层七、回顾整个过程总结前言 本文总结了关于卷积神经网络&#xff08;CNN&#xff09;的一些基础的概念&#xff0c;并且对于其中的细节进行了详细的原理讲解&#xff0c;通过此文可以十…

自动(智能)驾驶 | 4D雷达的数据集

上篇文章分享了关于Oculii 4D雷达的两篇报告。数据集是一个非常重要的研究工具&#xff0c;对于4D雷达领域来说&#xff0c;处于一个研究前沿的位置&#xff0c;鲜有公开的数据集&#xff0c;目前能找到的数据集有&#xff1a; 这些文章中的数据集有不少博主也写过&#xff0c…

S1000D规范导读

S1000D最初是由欧洲航空工业联盟开发的技术出版物规范&#xff0c;它主要为具有较长生命的复杂产品运行和维修而设计。这些年不断发展&#xff0c;已经扩展到这些行业的产品&#xff1a;国防系统 - 包括海、陆、空的产品&#xff0c;民用航空产品&#xff0c;基建行业产品和船舶…

15/365 java static final

1.static属性,方法 类内属性或方法用static修饰&#xff0c;表示该属性或方法属于类&#xff0c;不依赖于实例对象&#xff0c;所以不需要用对象调用&#xff0c;而是直接用类名调用。 static方法只能调用其他static方法&#xff0c;而普通方法可以调用其他的普通方法和stati…

Vue3商店后台管理系统设计文稿篇(二)

记录使用vscode构建Vue3商店后台管理系统&#xff0c;这是第二篇&#xff0c;主要记录Vue3中生命周期钩子&#xff0c;模板语法&#xff0c;以及相关的代码 文章目录一、Vue3生命周期二、Vue3模板语法三、代码展示正文内容&#xff1a; 一、Vue3生命周期 每个 Vue 实例在被创建…

拆机详解2:比Macintosh还早?苹果Lisa拆解

hello大家好&#xff0c;我是每天&#xff08;实际并不是每天&#xff0c;你们点的赞太少了&#xff0c;每人点一个赞我就日更&#xff09;给你们讲解的Eric_Bells.这里感谢博主半身风雪的支持&#xff0c;我会更新的&#xff01;看到的麻烦点个关注谢谢拉 今天唠唠一台比Maci…

【蓝桥杯基础题】2017年省赛—九宫幻方

&#x1f451;专栏内容&#xff1a;&#x1f449;蓝桥杯刷题&#x1f448;⛪个人主页&#xff1a;&#x1f449;子夜的星的主页&#x1f448;&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录一、题目背景二、题目描述1.问题描述2.输入格式3.输出格式4.一个例…

CAN通信----(创芯科技)CAN分析仪使用----CANTest安装和驱动安装

前言 我在调试CAN通信时&#xff0c;使用的是在淘宝买的CAN分析仪。 CAN分析仪的实物如下&#xff1a; 使用CAN分析仪&#xff0c;调试CAN通信&#xff0c;PC电脑端需要使用CANTest测试软件&#xff0c;还需要安装驱动。 一、创芯科技 CAN分析仪资料包下载 步骤1&#xff1…

测开-基础篇

一、软件测试的生命周期 先来回顾软件的生命周期 &#x1f351;软件的生命周期 需求分析--》计划--》设计--》编码--》测试--》运营维护 需求分析&#xff1a;进行市场分析&#xff0c;这个需求量大不大&#xff1f;投入与盈利的占比&#xff1f;技术上 能否实现或者说实现的…

深度学习 10 神经网络简介

1. 深度学习和机器学习的主要区别在于对数据的处理, 机器学习主要通过算法直接进行推断, 而深度学习主要通过神经网络对各种算法进行加权, 然后汇总得出结论. 2. 常用的激活函数: tanh函数relu函数leaky relu函数1.1 深度学习介绍 1.1.1 区别 机器学习的特征工程步骤是要靠手…

Effective Objective-C 2.0学习记录(五)

23.通过委托和数据源协议进行对象间通信 使用委托模式&#xff1a;获取网络数据的类含有一个“委托对象”&#xff0c;在获取完数据后&#xff0c;它会回调这个委托对象。 利用协议机制&#xff0c;很容易就 能以OC代码实现此模式&#xff0c;在图中演示的情况下。可以这样定义…

【Java AWT 图形界面编程】Container 容器总结

文章目录一、AWT 简介二、AWT 核心类继承体系三、Container 容器类子类四、Container 容器常用 API五、Frame 窗口示例六、Panel 示例七、窗口中文乱码处理八、ScrollPane 可滚动容器示例一、AWT 简介 Java 中 使用 AWT 和 Swing 进行 图形界面开发 , AWT 是 抽象窗口工具集 , …

线程安全问题(3)

线程不安全:在多线程的调度情况下&#xff0c;导致出现了一些随机性&#xff0c;随机性是代码中出现了一些BUG&#xff0c;导致我们的线程是不安全的 造成线程不安全的原因: 1)操作系统抢占式执行&#xff0c;线程调度随机&#xff0c;这是万恶之源&#xff0c;我们无能为力 2)…

Web进阶:Day7 响应式、BootStrap、实战演练

Web进阶&#xff1a;Day7 Date: January 10, 2023 Summary: 响应式、BootStrap、实战演练 响应式 媒体查询 目标&#xff1a;能够根据设备宽度的变化&#xff0c;设置差异化样式 媒体特性常用写法 媒体特性常用写法&#xff1a; max-width&#xff08;从小到大&#xff0…

transformers包介绍——nlp界最顶级的包——可以不用 但不能不知道——python包推荐系列

背景1 现在在AI行业&#xff0c;什么最火&#xff1f;计算机视觉还是自然语言处理&#xff1f;其实不得不说&#xff0c;现在nlp很火。还有人记得上个月很多科技爱好者都在玩的chatgpt么&#xff1f;那个就是nlp技术的一大应用。现在都在觉得AI赚钱&#xff0c;工资高&#xf…

深度学习 12 正则化

1. 对于高方差(过拟合)&#xff0c;有以下几种方式&#xff1a; 获取更多的数据&#xff0c;使得训练能够包含所有可能出现的情况 正则化&#xff08;Regularization&#xff09; 寻找更合适的网络结构 2. 对于高偏差(欠拟合)&#xff0c;有以下几种方式&#xff1a; 扩大网…