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

数论——约数(完整版)

2、约数

一个数能够整除另一数,这个数就是另一数的约数。

如2,3,4,6都能整除12,因此2,3,4,6都是12的约数。也叫因数。

1、求一个数的所有约数——试除法

例题:

给定 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;vector<int> deal(int n)
{vector<int> p;for (int i = 1; i <= n / i; i++)if (n % i == 0)//成为约数的条件{p.push_back(i);if (i != n / i)//边界特判{p.push_back(n / i);}}sort(p.begin(),p.end());return p;
}int main()
{int n; cin >> n;while (n--){int x; cin >> x;auto y =deal(x);for (auto a : y)cout << a << ' ';}return 0;
}

2、约数个数

int范围内约数个数最多大概1500

在这里插入图片描述

题目:约数个数

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

输入格式

第一行包含整数 n。

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

输出格式

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

数据范围

1≤n≤100,
1≤ai≤2×10^9

输入样例:

3
2
6
8

输出样例:

12

代码
#include <iostream>
#include <algorithm>
#include <unordered_map>//用哈希表--更快一些using namespace std;
typedef long long LL;
const int mod = 1e7 + 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]++;//i的质因数的质数+1}}if (x > 1) primes[x]++;}LL x = 1;for (auto prime : primes) x = x * (prime.second + 1) % mod;cout << x;return 0;
}

3、约数之和

在这里插入图片描述

如何去计算

在这里插入图片描述

套用公式 t = p * t + 1;

​ t = p * t + 1;

执行第一次 t = p ^ 0 = 1

执行第二次 t = p^ 1 + 1

执行第三次 t = p^2 + p^1 + 1

​ …. ……

执行第n次 t = p ^ n + … + p^0

问题描述:

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

输入格式

第一行包含整数 n。

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

输出格式

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

数据范围

1≤n≤100,
1≤ai≤2×1091≤ai≤2×109

输入样例:

3
2
6
8

输出样例:

252

代码
#include <iostream>
#include <algorithm>
#include <unordered_map>//用哈希表--更快一些using namespace std;
typedef long long LL;
const int mod = 1e7 + 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]++;//i的质因数的质数+1}}if (x > 1) primes[x]++;}LL x = 1;for (auto prime : primes){int p = prime.first;//表示质数的底数int a = prime.second;//表示质数的指数LL t = 1;//用t来表示局部的总和、while (a--) //执行质数次t = (t * p + 1) % mod;x = x * t % mod;}cout << x;return 0;
}

4、欧几里得算法(辗转相除法)

题目——最大公约数

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

输入格式

第一行包含整数n。

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

输出格式

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

数据范围

1≤n≤105,
1≤ai,bi≤2∗109

输入样例

2
3 6
4 6

输出样例

3
2

代码
#include <iostream>using namespace std;int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}int main()
{int n; cin >> n;while (n--){int a, b;cin >> a >> b;cout << gcd(a, b);}return 0;
}

http://www.mrgr.cn/news/66391.html

相关文章:

  • C# 独立线程
  • Python | Leetcode Python题解之第537题复数乘法
  • sicp每日一题[2.70]
  • 国内短剧源码短剧系统搭建小程序部署H5、APP打造短剧平台
  • 关于 PDF 抽取的吐槽
  • wpf 制作丝滑Flyout浮出侧边栏Demo (Mahapps UI框架)
  • 【商用存储】希捷磁盘阵列部署实践
  • 印刷质量检测笔记
  • 总线(概述、事务和定时)
  • 前沿吃瓜:如何看待linux社区将俄罗斯的linux贡献者“逐出”社区
  • Mybatis和Hibernate
  • Meta VR硬件主管强势加入OpenAI,与苹果传奇设计师合作开发新AI设备
  • 02- 模块化编程-005 MAX1241数码显示
  • 配置深度学习环境
  • pdf添加目录标签python(手动配置)
  • dockerdockerfiledocker-compose操作nginx
  • MMBench-Video:上海 AI Lab 联合多所高校推出长视频理解基准测试工具,全面评估 LVLMs 视频理解的能力
  • 远程操作Linux服务器 _Xshell、Xftp以及Linux常见操作命令
  • 不要只知道deepl翻译,这里有10个专业好用的翻译工具等着你。
  • 自车坐标系与大地坐标系的理解与转换
  • 【C++】C++的单例模式
  • 讲讲软件业务设计原则?
  • 鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)
  • [Unity Demo]从零开始制作空洞骑士Hollow Knight第十九集:制作过场Cutscene系统
  • 第二届计算机网络技术与电子信息工程国际学术会议(CNTEIE 2024,12月6-8日)
  • 7.3、实验三:RIPv2的基本配置