首页 > 其他分享 >分解质因数--试除法

分解质因数--试除法

时间:2023-05-28 14:44:32浏览次数:49  
标签:include 除法 -- 合数 int 枚举 时候 质因数

 #include <iostream>
#include <cstring> #include <algorithm> using namespace std; void divide(int n){ for(int i=2;i<=n;i++) //这个地方是枚举到n
{ if(n%i==0) { int s=0; while(n%i==0) { n/=i; s++; } cout<<i<<" "<<s<<endl; } } if(n>1) cout<<n<<" "<<1<<endl; cout<<endl; } int main() { int n; cin>>n; while (n -- ){ int x; cin>>x; divide(x); } return 0; }

 但是按照题意我们需要的是枚举质因数,然后呢我们枚举的是 1到n ,这个时候我们就会考虑一个问题,就是1到n这个里面就是不只有质数,还有合数,这个是我们担心的一个问题.

我们来说明一下这个情况

为什么我们枚举这个1-n是可以行的

.............................................................................

比如呢,1-n中有一个合数6,12,8,14

对于6 ,等到枚举到6的时候,其实在2这个质因数的时候就已经有了1次了,在3这个质因数的时候就也有1次了。。。

对于12 ,等到枚举到12的时候,其实在2这个质因数的时候就已经有了2次了,在3这个质因数的时候就也有1次了。。。

对于8,等到枚举到8的时候,其实在2这个质因数的时候就已经有了3次了。。。

对于14 ,等到枚举到14的时候,其实在2这个质因数的时候就已经有了1次了,在7这个质因数的时候就也有1次了。。。

................................................................................

综上所述,可想而知,在这个枚举的过程的时候是不可能枚举到合数的(也不是在枚举不到合数,就在枚举到合数的时候,就会跳过,因为这个合数在之前除他的质因数的时候就已经除干净了)---------eg: 6/3/2=1

..................................................................................

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

void divide(int n){
    
    for(int i=2;i<=n/i;i++)   //如果枚举到n的话时间复杂度就是O(n)的
    
    //但是我们需要优化   ---根据 性质:n中最多包含一个大于sqrt(n)的质因子
    //证明:   如果有两个的话,二者相乘很明显就大于n了呀,就是不对的
    {
        if(n%i==0)
        {
            int s=0;
            while(n%i==0)
            {
                n/=i;
                s++;
            }
        cout<<i<<" "<<s<<endl;
        }
    }
    if(n>1)  cout<<n<<" "<<1<<endl;
    cout<<endl;
}
int main()
{
    int n;
    cin>>n;
    
    while (n -- ){
        int x;
        cin>>x;
        
        divide(x);
    }
    
    return 0;

}

这里我们需要解释一些地方,也就是优化的部分,可想而知

这个时候我们会联想到我们上一篇写的博客:质数的判定--试除法 - 不是小朋友L - 博客园 (cnblogs.com)

然后就可以证明这条性质:

性质:n中最多包含一个大于sqrt(n)的质因子
很明显:如果有两个大于根号n的质因子,那么就相乘就会大于n
所以只要枚举到根号就可以了
关键代码就是:
for(int i=2;i<=n/i;i++) 
 if(n>1)  cout<<n<<" "<<1<<endl;//这段代码也是很重要的,他的作用是:因为我们只枚举到根号n,所以如果有一个大于根号n的质因子,我们就单独把他输出出去,属于特判。。

 



标签:include,除法,--,合数,int,枚举,时候,质因数
From: https://www.cnblogs.com/FJCLJ/p/17438103.html

相关文章

  • httprunner4.x学习6 - 两种方式处理接口关联
    第一种方式:使用export导出变量,变成全局变量当登录用例写完后,后面想继续写其他用例,可以导入前面的login用例,当成下个用例的步骤使用导入前一个用例之前,需先export导出变量,变成全局变量。登陆用例:创建文件夹login,在文件夹下分别创建两个文件login.yml和useinfo.ymllogin.yml......
  • php循环创建数组
    PHP中可以使用for循环、while循环和foreach循环来创建数组。下面是一个使用for循环创建数组的示例代码:<?php$myArray=array();for($i=0;$i<5;$i++){$myArray[$i]=$i*2;}print_r($myArray);?>该代码将创建一个空数组,然后使用for循环遍历数组并为每个元素......
  • AHBRAM项目理解
    1.采样协议的理解  灰色的部分可以当做延迟或者亚稳态理解协议中的波形图中有的长有的短,这个暂态可能是由于组合电路的延迟,也有可能是时序电路的延迟。发送激励之前要满足协议,所以要实现AHB协议,lvc_ahb_types和lvc_ahb_transaction在master_driver中实现AHB协议 AHB协......
  • 通过案列理解变量类型的应用场景
    packagecom.StaticDemo;publicclassTest1{publicstaticvoidmain(String[]args){//通过案列理解变量类型的应用场景Useru1=newUser();Useru2=newUser();Useru3=newUser();Useru4=newUser();S......
  • linux 分支预测
    有一个元素为0到100之间随机数字组成的一维数组:接下来,对这个数组做两个操作:第一个操作,循环遍历数组,把小于50的数组元素置为0;第二个操作,将数组排序;那么问题来了,你觉得先遍历再排序速度快,还是先排序再遍历速度快呢? 对于if条件语句,意味着此时至少可以选择跳转到......
  • CentOS 9 安装 Nginx 模块 `subs_filter`
    sub_filter和subs_filter区别sub_filter(0.7.24):替换响应体(ResponseBody)中的文本,只能设置一组替换。subs_filter:替换响应体(ResponseBody)和响应头(ResponseHeaders)中的文本,可以设置多组替换。sub_filter使用案例:http{server{listen80;server_......
  • creat
    Create(nil);//需要自己释放//这种方式创建的对象要自己手工进行FREE才会回收内存//其他很多内存泄漏就是忘了手工释放内存Create(Self);//当Self释放时自动触发释放//由self对象负责释放创建的对象,只要self没有释放掉//这个对象的内存就不会被释入掉,除程序员手工进行释放......
  • WEB漏洞—SQL注入之类型及提交注入
    本章包含所有sqli-labs-master测试,所以内容较少,更多内容在测试里GET,参考sqli-labs-matser(LESS-1到5)POST,参考sqli-labs-matser(LESS-11) COOKIE数据提交注入测试(sqli-labs-masterLESS-20)cookie注入原理:对get传递来的参数进行了过滤,但是忽略了cookie也可以传递参数。通过数......
  • 可视化库D3.js
    什么是D3.jsD3指的是Data-DrivenDocuments,js即Javascript,是后缀名。先看看官网上对D3.js库的定义:D3.js是基于数据驱动文档工作方式的一款JavaScript函数库,主要用于网页作图、生成互动图形,是最流行的可视化库之一。D3使你有能力借助HTML,SVG和CSS来生动地可视化各种数据**D3不......
  • 系统工程(十一) 信息化的概念
    信息化是在国家宏观信息政策的指导下,通过信息技术开发、信息产业的发展、信息人才的配置,最大程度利用信息资源满足全体社会的信息需求,加速社会各个领域共同发展以推进信息社会的过程信息化的主体是全社会成员(国家、企业、团体、个人),时域是一个长期过程,空域是经济和社会的一切领域......