首页 > 其他分享 >第四讲 数学知识——约数

第四讲 数学知识——约数

时间:2023-12-09 14:11:29浏览次数:25  
标签:约数 limits int cin long 数学知识 include 第四

AcWing 869. 试除法求约数

时间复杂度 \(O(n\sqrt a)\)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> res;
int n, a;
int main()
{
    cin >> n;
    while (n--) {
        res.clear();
        cin >> a;
        for (int i = 1; i <= a / i; ++i) {
            if (a % i == 0) {
                if (a / i == i) res.push_back(i);
                else res.push_back(i), res.push_back(a / i);
            }
        }
        sort(res.begin(), res.end());
        for (int it : res)
            cout << it << " ";
        cout << endl;
    }
    return 0;
}

AcWing 870. 约数个数

\(N=\prod\limits_{i=1}^{k}p_i^{d_i}\)

公式 \(\prod\limits_{i=1}^k(d_i+1)\)

怎么理解公式呢?可以分两种情况。

我们先设 \(b=\prod\limits_{j=1}^{i-1}(d_j+1)\)

情况一 \(i > 1\)

用乘法分配律得 \(b \cdot d_i + b\)

其中 \(b \cdot d_i\) 是用乘法原理新组成的约数,\(b\) 是旧的约数。

情况二 \(i=1\)

约数个数就是 \(d^i+1\)

\(d_i\) 新的,而 \(1\) 是每个因数必有的 \(1\)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
const int MOD = 1e9 + 7;
int n, a;
unordered_map<int, int> d;
int main()
{
    cin >> n;
    while (n--) {
        cin >> a;
        for (int i = 2; i <= a / i; ++i) {
            while (a % i == 0) {
                ++d[i];
                a /= i;
            }
        }
        if (a > 1) ++d[a];
    }
    long long ans = 1;
    for (auto it : d) {
        ans = ans * (it.second + 1) % MOD;
    }
    printf("%lld\n", ans);
    return 0;
}

AcWing 871. 约数之和

\(N=\prod\limits_{i=1}^{k}p_i^{d_i}\)

公式 \(\prod\limits_{i=1}^k\sum\limits_{j=0}^{d_i}p_{i}^{j}\)

证明很简单用乘法分配律展开就是了。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
const int MOD = 1e9 + 7;
int n, a;
unordered_map<int, int> d;
int main() {
    cin >> n;
    while (n--) {
        cin >> a;
        for (int i = 2; i <= a / i; ++i) {
            while (a % i == 0) {
                ++d[i];
                a /= i;
            }
        }
        if (a > 1) ++d[a];
    }
    long long ans = 1;
    for (auto it : d) {
        long long t = 0, tt = 1;
        for (int i = 0; i <= it.second; ++i)
            t = (t + tt) % MOD, tt = it.first * tt % MOD;
        ans = ans * t % MOD;
    }
    printf("%d\n", ans);
    return 0;
}

AcWing 872. 最大公约数

热知识:一般 \(\gcd(a,b)\) 都写成 \((a,b)\)

公式 \((a,b)=(b,a \mod b)\)

证明:

\(\begin{aligned}a \mod b&=a-\lfloor{\frac{a}{b}}\rfloor\cdot b\\&=a-x\cdot b \end{aligned}\)

我们设 \(d=(a,b)\)

那么 \(d \mid a,d\mid b,d\mid a+b, d\mid ax+by\)

所以 \((a,b)=(b,a-\lfloor{\frac{a}{b}}\rfloor\cdot b)=(b,a\mod b)\)

证毕

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

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

标签:约数,limits,int,cin,long,数学知识,include,第四
From: https://www.cnblogs.com/coldair7/p/17890878.html

相关文章

  • 第四讲 数学知识——质数
    AcWing866.试除法判定质数时间复杂度\(O(T\sqrta)\)#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;boolisprime(intx){if(x<2)returnfalse;for(inti=2;i<=x/i;++i){if(x......
  • **第四章 字符串****part02**
    第四章字符串**part02**    28.找出字符串中第一个匹配项的下标 题目链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/  暴力法Code:classSolution{public:  intstrStr(stringhaystack,stringneedle)......
  • 《Java编程思想第四版》学习笔记45--关于图标
    //:Faces.java//IconbehaviorinJButtonspackagec13.swing;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassFacesextendsJPanel{staticIcon[]faces={newImageIcon("face0.gif"),......
  • 活动预告 | 中国数据库联盟(ACDU)中国行第四站定档西安,邀您探讨数据库前沿技术
    作为墨天轮社区与中国数据库联盟的品牌活动之一,【ACDU中国行】已走过深圳、杭州、成都三大城市,在线下汇集数据库领域的行业知名人士,共同探讨数据库前沿技术及其应用,促进行业发展和创新,同时也为开发者们提供一个友好交流的平台。 12月23日下午,【ACDU中国行】将前往古城西安,......
  • Java第四课_循环和函数
    1.循环for/*for(初始化语句A;boolean类型表达式B;更改表达式C){循环体,就是需要被重复执行的代码;D}执行顺序:for-->A-->B-->|false:循环到此结束......
  • 《Java编程思想第四版》学习笔记44--关于按钮组
    //:ButtonGroups.java//Usesreflectiontocreategroupsofdifferent//typesofAbstractButton.packagec13.swing;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.border.*;importjava.lang.reflect.*;publicclassB......
  • 第四单元 视图与模型
    createdatabaseMvcUnit4;gouseMvcUnit4;gocreatetableProduct(Idbigintprimarykey,ProductNamevarchar(30),CategoryNamevarchar(30),Pricedecimal(10,2),Remarkvarchar(200),CreatedUserIdbigint,UpdatedUserIdbigint......
  • 直播预约丨《实时湖仓实践五讲》第四讲:实时湖仓架构与技术选型
    如今,大规模、高时效、智能化数据处理已是“刚需”,企业需要更强大的数据平台,来应对数据查询、数据处理、数据挖掘、数据展示以及多种计算模型并行的挑战,湖仓一体方案应运而生。《实时湖仓实践五讲》是袋鼠云打造的系列直播活动,将围绕实时湖仓的建设趋势和通用问题,邀请奋战于企业数字......
  • 直播预约丨《实时湖仓实践五讲》第四讲:实时湖仓架构与技术选型
    如今,大规模、高时效、智能化数据处理已是“刚需”,企业需要更强大的数据平台,来应对数据查询、数据处理、数据挖掘、数据展示以及多种计算模型并行的挑战,湖仓一体方案应运而生。《实时湖仓实践五讲》是袋鼠云打造的系列直播活动,将围绕实时湖仓的建设趋势和通用问题,邀请奋战于企业数......
  • 学C笔记归纳 第四篇——static关键字(重点)
    C语言本身内置了关键字,并非自己创建,也不能自己创建。static的功能:static功能修饰局部变量转变储存位置,延长局部变量生命周期,也可以保持其值不变修饰全局变量将外部链接属性变为内部连接属性,使作用域变小,其他源文件(.c)就不能再使用这个全局变量了,增加程序安全性模块内函......