数论----约数

这篇具有很好参考价值的文章主要介绍了数论----约数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,写出一个数的所有约数

活动 - AcWing

思想:这题数据较大,使用试除法来减小时间复杂度。还有一点需要注意,两约数相同,只保留一个。

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;

//试除法
void f(int num, vector<int> &v) {
	for (int i = 1; i <= sqrt(num);i++) {
		if (num % i == 0) {
			v.push_back(i);
			if(i!=num/i) v.push_back(num / i);//注意,只有两者不相同时才能进数组
		}
	}
	sort(v.begin(), v.end());
	return;
}

int main()
{
	int T;
	cin >> T;
	while (T--) {
		int num;
		vector<int> v;
		cin >> num;
		f(num, v);
		for (int i = 0; i < v.size(); i++) {
			cout << v[i];
			if (i != v.size() - 1) cout << " ";
		}
		cout << endl;
	}
	return 0;
}

二,求约数个数

思想:这题数据很大,需要使用特殊的方法,这篇题解写的很详细

(AcWing 870. 约数个数---$\color{red}{海绵宝宝来喽}$ - AcWing)

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
const long long mod = 1e9 + 7;



int main()
{
	int n;
	cin >> n;
	map<long long, int> mp;
	while (n--) {
		long long num;
		cin >> num;
		for (int i = 2; i <= sqrt(num); i++) {//求每一项的指数
			while (num % i == 0) {
				mp[i]++;
				num /= i;
			}
		}
		//如果有剩余,也是一个质因子
		if (num > 1) mp[num]++;
	}
	
	long long ans = 1;
	for (auto it = mp.begin(); it != mp.end(); it++) {
		//套用公式(x1+1)(x2+1)(x3+1)…(xk+1)
		ans = ans * (it->second + 1) % mod;
	}
	cout << ans << endl;
	return 0;
}

三,约数之和

活动 - AcWing

思想:

基本思想:
如果 N=p1c1∗p2c2∗…∗pkck
约数个数:(c1+1)∗(c2+1)∗…∗(ck+1)
约数之和: (p10+p11+…+p1c1)∗…∗(pk0+pk1+…+pkck)

根据上面的公式,我们在上一题的基础上进行修改就可以了

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
const long long mod = 1e9 + 7;

int main()
{
	int n;
	cin >> n;
	map<long long, int> mp;
	while (n--) {
		long long num;
		cin >> num;
		for (int i = 2; i <= sqrt(num); i++) {//求每一项的指数
			while (num % i == 0) {
				mp[i]++;
				num /= i;
			}
		}
		//如果有剩余,也是一个质因子
		if (num > 1) mp[num]++;
	}
	
	long long ans = 1;
	for (auto it = mp.begin(); it != mp.end(); it++) {
		//套用公式(p10+p11+…+p1c1)∗…∗(pk0+pk1+…+pkck)
		long long a = it->first, b = it->second;
		long long t = 1;
		while (b--) t = (t * a + 1) % mod;
		ans = ans * t % mod;
	}
	cout << ans << endl;
	return 0;
}

四,最大公约数

活动 - AcWing

思想:用辗转相除法效率最高

AC代码

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        int a, b;
        cin >> a >> b;
        //辗转相除,直到小括号内右边数为0
        while(b)
        {
            //c 一定小于 b
            int c = a % b;
            //小括号左边放除数,右边放约数
            a = b;
            b = c;
        }
        //小括号内左边数为最大公约数
        cout << a << endl;
    }
}

递归简化版文章来源地址https://www.toymoban.com/news/detail-665451.html

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
const long long mod = 1e9 + 7;

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

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

到了这里,关于数论----约数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法与数据结构】--算法应用--算法和数据结构的案例研究

    一、项目管理中的算法应用 在项目管理中,算法和数据结构的应用涉及项目进度、资源分配、风险管理等方面。以下是一些案例研究,展示了算法在项目管理中的实际应用: 项目进度管理 : 甘特图算法 :甘特图是一种项目进度管理工具,它使用甘特图算法来展示项目任务

    2024年02月08日
    浏览(58)
  • 数据结构与算法设计分析—— 数据结构及常用算法

    1、顺序表与链表 线性表是 线性结构 ,是包含n个数据元素的有限序列,通过顺序存储的线性表称为 顺序表 ,它是将线性表中所有元素按照其逻辑顺序,依次存储到指定存储位置开始的一块连续的存储空间里;而通过链式存储的 链表 中,每个结点不仅包含该元素的信息,还

    2024年02月07日
    浏览(62)
  • 数据结构和算法——数据结构

    目录 线性结构  队列结构的队列 链表结构的队列 链表的面试题 单向链表应用场景 约瑟夫环问题 栈结构 中缀表达式 前缀表达式 后缀表达式 非线性结构 图 递归解决迷宫问题 递归解决八皇后问题 顺序存储方式,顺序表 常见的顺序存储结构有:数组、队列、链表、栈 链式存

    2024年02月07日
    浏览(56)
  • 数据结构与算法 --- 数据结构绪论

    早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。 可现实中,我们更多的不是解决数值计算的问

    2024年02月14日
    浏览(54)
  • 数据结构与算法——数据结构有哪些,常用数据结构详解

    数据结构是学习数据存储方式的一门学科,那么,数据存储方式有哪几种呢?下面将对数据结构的学习内容做一个简要的总结。 数据结构大致包含以下几种存储结构: 线性表,还可细分为顺序表、链表、栈和队列; 树结构,包括普通树,二叉树,线索二叉树等; 图存储结构

    2024年02月15日
    浏览(63)
  • 数据结构与算法——什么是数据结构

    当你决定看这篇文章,就意味着系统学习数据结构的开始。下面我们先来讲什么是数据结构。 数据结构,直白地理解,就是研究数据的存储方式。 我们知道,数据存储只有一个目的,即为了方便后期对数据的再利用,就如同我们使用数组存储  {1,2,3,4,5}  是为了后期取得它们

    2024年02月15日
    浏览(55)
  • 【数据结构与算法】不就是数据结构

      嗨喽小伙伴们你们好呀,好久不见了,我已经好久没更新博文了!之前因为实习没有时间去写博文,现在已经回归校园了。我看了本学期的课程中有数据结构这门课程(这么课程特别重要),因为之前学过一点,所以就想着深入学习一下子。毕竟这门课程对于 考研 和 就业

    2024年02月07日
    浏览(49)
  • 【数据结构与算法】1.数据结构绪论

    📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点,相互学习进步! 数据结构是计算机中存储、组织数据的方式。 数据结构是一种具有一定逻辑关系,

    2024年01月23日
    浏览(54)
  • 数据结构--》掌握数据结构中的排序算法

            当我们面对海量数据时,如何高效地将其排序是数据结构领域中一个重要的问题。排序算法作为其中的关键部分,扮演着至关重要的角色。         无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可行的知识点,帮助你更好地掌握排序算法在数据

    2024年02月08日
    浏览(43)
  • 【数据结构与算法】一、数据结构的基本概念

    抽象数据类型(ADT)定义举例:Circle的定义 如何处理杂乱无章且多样化的数据: 数据元素 :数据中的个体被称为数据元素。 数据对象 :性质相同的数据元素组成的集合。 数据结构 :数据元素加上数据元素之间的关系,就形成了数据结构。 逻辑结构 :数据结构的逻辑模型。

    2023年04月17日
    浏览(99)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包