首页 > 其他分享 >分解质因数

分解质因数

时间:2023-12-24 18:23:51浏览次数:16  
标签:int 合数 枚举 分解 质因数 ldots

分解质因式

数学定理:根据算术基本定理,不考虑排列顺序的情况下,每个正整数都能够以唯一的方式表示成它的质因数的乘积。

即:任何一个数都可以写成 $$N = P_{p1}^{a1} + P_{p2}^{a2} + \ldots + p_{pk}^{ak} $$ 其中P为质数

故我们引伸出分解质因数的算法:

原理:我们从第一个质因数开始枚举到\(\sqrt{n}\) 如果其能整除,则说明它是n的一个质数。

但,也许有些人会疑惑它这样子枚举不是会枚举到合数吗?

确实,他会枚举到合数,但是这些合数在我们分解质因数的途中也被分解掉了,故而枚举不到这些合数。

即:设我们分解一个质因数\(N\)则我们会从2开始分解它

​ 我们会尝试它能不能被\(P_1\)分解,则被2分解,如果可以,我们就执行\(N = N / P_1\) 然后执行\(N = N / P_2\) , \(N = N / P_3\) \(\ldots\) \(N = N / P_k\) 在此途中,我们每枚举到\(P_i\)的时候,设从 \(2 \sim i-1\)此时有一个合数是\(N\)的约数,设其为\(d\)。但我们这个合数也可以被分解为 $$d = P_{p1}^{b1} + P_{p2}^{b2} + \ldots + p_{pi-1}^{bi-1} $$ 故而这个合数自然而然的在前面的枚举的过程中被分解掉了。

​ 所以总结来说,既然\(2\sim i-1\)这个过程中所有合数都被分解之前的质因数除掉了,所以如果我们取到了新的可以整除\(N\)的数\(num\)的话,这个\(num\)只能是新出现的质因数\(P_i\) 了

代码:(yxc版本)

#include <iostream>
#include <algorithm>

using namespace std;

void divide(int x)
{
    for (int i = 2; i <= x / i; i ++ )
        if (x % i == 0)
        {
            int s = 0;
            while (x % i == 0) x /= i, s ++ ;
            cout << i << ' ' << s << endl;
        }
    if (x > 1) cout << x << ' ' << 1 << endl;
    cout << endl;
}

int main()
{
    int n;
    cin >> n;
    while (n -- )
    {
        int x;
        cin >> x;
        divide(x);
    }

    return 0;
}

作者:yxc
链接:https://www.acwing.com/activity/content/code/content/49974/
来源:AcWing

标签:int,合数,枚举,分解,质因数,ldots
From: https://www.cnblogs.com/apexvol-lord-xbdx/p/17924681.html

相关文章

  • Leetcode 2521. 数组乘积中的不同质因数数目
    https://leetcode.cn/problems/distinct-prime-factors-of-product-of-array/description/给你一个正整数数组nums,对nums所有元素求积之后,找出并返回乘积中不同质因数的数目。注意:质数是指大于1且仅能被1及自身整除的数字。如果val2/val1是一个整数,则整数val......
  • Leetcode 2507. 使用质因数之和替换后可以取到的最小值 优化前 优化后
    https://leetcode.cn/problems/smallest-value-after-replacing-with-sum-of-prime-factors/description/给你一个正整数n。请你将n的值替换为n的质因数之和,重复这一过程。注意,如果n能够被某个质因数多次整除,则在求和时,应当包含这个质因数同样次数。返回n可以取到......
  • 电工必考题:双互锁控制电机正反转,10张分解图教会你接线
     图中是需要的电气元件和对应的符号,我们先按照符号把电气摆好。 废话不多说,直接上干货,我们开始接线。 注意看右边的电路图,对应左边的实物接线。断路器的三根出线黄绿红先接三个熔断器,熔断器的三根出线接接触器的主触点的进线端。接触器自身辅助触点为常开点,自锁的时候我们......
  • 对比全分解和先验分解
    单线的defforward(self,x):y=self.g_a(x)y_hat,y_likelihoods=self.entropy_bottleneck(y)x_hat=self.g_s(y_hat)return{"x_hat":x_hat,"likelihoods":{"y":y_likelihoods,......
  • 因果推断入门14-16 乘积分解法则、混淆变量、习题
    https://www.bilibili.com/video/BV1Mv411v7zC/?p=14&spm_id_from=pageDriver前面的章节我们学了一些基本个因果图模型,以及一些基本的规则。我们可以根据这些规则,把复杂的问题进行化简;当我们知道图的结构以及随机变量,和随机变量之间的联合分布;联合分布可以用其密度函数来表达,如......
  • C++分解质因数代码实现
    一、问题描述:什么叫做分解质因数?就是我们给定一个数字,把这个数字的是质数的因子按照从小到大的顺序排列出来,并输出每个质因子的个数。二、实现思路:就是我们从1~n/i这个范围内(i*i=n),如果找到了一个因子,使得n%i==0,那么我们就进一步除下去,直到无法满足n%i==0为止。这个时候,i一定......
  • 欧氏空间上正规算子极小多项式的不可约分解诱导出全空间的正交直和分解
    ......
  • 907. 子数组的最小值之和(贡献法,单调栈,前后缀分解)
     题目不难,但是涉及到的知识点很丰富。classSolution:defsumSubarrayMins(self,arr:List[int])->int:MOD=10**9+7n=len(arr)pre=[-1]*nsuf=[n]*nstk=[]foriinrange(n):w......
  • 熵模型-为什么使用条件概率优于个元素独立的全分解模型?
    熵模型论文<VARIATIONALIMAGECOMPRESSIONWITHASCALEHYPERPRIOR提出使用超先验,来捕获潜在表示的超先验。追根溯源发现:在香农的通信理论中给出数学解释即,使用联合分布比独立分布更优如果有先验的信息,对后续编码而言其不确定性会更小,从而获得更小的比特流。该博客提供......
  • 2022年十三届----试题C:质因数个数(中)
    目录题目暴力题解题目暴力先暴力把到n的质数存在一个列表里面,如何遍历列表,如果n可以整除该质数就count++,最后返回countm=[]count=0n=int(input())foriinrange(1,n):ifi>1:forjinrange(2,int(i**0.5)+1):ifi%j==0:......