`
JokerT
  • 浏览: 21845 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

长整数的因子分解

阅读更多

练习题做多了就发现有好多整数相关的题目都要用到因子分解(或是其变种,如整除之类),比如有一个题:给定整数N,若N可以分解为四个整数乘积,我们称其级别为1,如果上述分解的因子每个都能进行同样的分解,我们称N级别为2,依次类推,求任意N的级别

 

我的思路是设立一个全局变量count 通过递归函数进行N的逐步整除,每次整除count都要加1,通过count控制在4以内结束递归,然后对N的每个因子进行类似处理。类似于上一篇博客的问题。大致代码如下(未完成):

后来我发现这样做行不通,不说最后能否运行,但是复杂度就已经惊人,最差为N!级别

最近好像很迷信递归,但这个题来讲递归不是好办法。

接下来参考其他人的算法,确实让我开了眼界。该程序来自stubbscroll,如果我的考虑是自上而下,他的做法应该是自下而上,先将N分解为质因子,通过计算质因子数可以多少次被4除就能判定N的级别了。非常简洁,复杂度应该为O(NlogN)

一下为代码:

分享到:
评论

相关推荐

    算法分析与设计:分治法(整数的因子分解+Gray码)(C++可执行源码+完整算法分析)

    题目 1: 给定一个整数 n,对其进行因子分解,编写程序,求解所有的分解方法,并统计其有多少种不同的分解方法。 输入要求: 输入整数 n,占 1 行。 输出要求: 输出的第 1 行为一个整数,即该整数有多少种因子分解...

    整数分解与RSA的安全性

    提出了 3 种大整数因数分解的方法,并通过这些方法对 RSA 密码算法的安全性做出了界定。根据分析得知,如果不考虑RSA中生成密钥的2个素数之间的差值,单纯地增加2个素数的取值对提高安全性很可能是无效的。最后,给...

    西南交通大学算法理论课作业4.rar

    题目 1: 给定一个整数 n,对其进行因子分解,编写程序,求解所有的分解方法,并统 计其有多少种不同的分解方法。 题目 2:用分治策略设计实现 Gray 码:Gray 码是一个长度为 2 的 n 次方的序列,序列 中无相同元素...

    相对因子宽度与可S-因子分解矩阵 (2007年)

    设S是实数集R的一个非空子集,如果存在S上的矩阵B,使得A=BBT,则称A是可S-因子分解的.对于一个实对称矩阵A,如果存在一个最小正整数k以及实矩阵(长方形)V,使得A= VVT,且V的每一列至多只有k个非零元素,则称A的...

    NFACTORK:找出 N 的所有具有 K 个元素的因式分解。-matlab开发

    NFACTORK 具有 K 个元素的整数 N 的所有整数因式分解。 T = NFACTORK(N,K) 返回一个具有 K 列的数组,使得 all(prod(T,2)==N) 为真。 例子: T = nfactork(24,3) % 产生T = 1 1 24 1 2 12 1 3 8 1 4 6 2 2 6 2 3 4 ...

    FFT算法分析及方法

    基于把长序列的DFT逐次分解为较短序列的DFT原理,按照抽取方式的不同分为DIT-FFT(按时间抽取)和DIF-FFT(按频率抽取)算法。按照蝶形运算的构成不同可分为基2、基4、基8以及任意因子(2n,n为大于1的整数),给出...

    matlab fft计算

    % 本次分解的基本DFT因子WN=exp(-i*2*pi/Nz) for j=1:Nz/2 % 本次跨越间隔内的各次蝶形运算,在进行第mm级运算时需要2^(mm-1)个 蝶形 for k=j:Nz:N % 本次蝶形运算的跨越间隔为Nz=2^mm kp=k+Nz/2; % 蝶形运算的两个...

    经典算法(c&java版)

    • 最大公因子、最小公倍数、因式分解 • 完美数 • 阿姆斯特朗数 • 最大访客数 • 中序式转后序式(前序式) • 后序式的运算 关于赌博 • 洗扑克牌(随机数排列) • Craps赌博游戏 • 约瑟夫问题...

    基于可编程hash函数的短签名

    本文利用可编程hash函数设计了一个基于因子分解假设的短签名方案,它具有的优点是:1)签名长度短,只需要一个群上的元素和一个小整数;2)签名和验证计算量小,不需要在签名过程中进行生成素数的运算;3)不需要嵌入变色龙...

    matlab求矩阵的行列式的代码-IndexCalculusMethod:使用指数演算法求解离散对数问题

    如果s可以在因子基上分解,我将把不同的因子存储在矩阵中。 我将一直这样做,直到在矩阵中找到[length(base)]个线性独立的线为止。 通过计算包含因子的矩阵的秩可以知道这一点。 下一步是解决线性系统。 然后,...

    Java经典编程题(附答案)

    题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印...

    FFT.rar_DFT ppt_dft 频率_dif fft_fft 4_基8 DIT-FFT

    FFT算法的基本原理是把长序列的DFT逐次分解为较短序列的DFT.按照抽取方式的不同可分为DIT-FFT(按时间抽取)和DIF-FFT(按频率抽取)算法.按照蝶形运算的构成不同可分为基2、基4、基8以及任意因子(2n,n为大于1的整数),基...

    fft.rar_FFT 基 8_fft_fft 加窗_radix_基8 FFT

    FFT算法的基本原理是把长序列的DFT逐次分解为较短序列的DFT。按照抽取方式的不同可分为DIT-FFT(按时间抽取)和DIF-FFT(按频率抽取)算法。按照蝶形运算的构成不同可分为基2、基4、基8以及任意因子(2n,n为大于1的...

    java 经典习题.doc

    题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印...

    FFT算法分析

    FFT算法的基本原理是把长序列的DFT逐次分解为较短序列的DFT。按照抽取方式的不同可分为DIT-FFT(按时间抽取)和DIF-FFT(按频率抽取)算法。按照蝶形运算的构成不同可分为基2、基4、基8以及任意因子(2n,n为大于1的...

    ACM算法模板和pku代码

    素数表质因子分解 Stirling公式 中国剩余定理 欧拉数(递推法) 欧拉数(公式法) 十进制转负进制 归并排序求逆序数 Pell方程 Catalan数,100以内 欧拉函数讲解 组合计数 组合数计算(double) 组合数计算(高...

    leetcode三角形打印-ex_java:java练习题(来源各个地方and难度随机)

    6.题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。 7.题目:求numbers=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加). 8.题目:一个数如果恰好等于它的...

    各种c++经典例题,多种编程语言

    题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 【程序14】 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,  60分以下的用C表示。 【程序15】 ...

    上海电机学院C语言实训答案

    ④ 由输入整数分解排序后的数组得到最大值和最小值: int getmaxn(int a[ ]) 返回值为最大值 int getminn(int b[ ]) 返回值为最小值 (13)函数 fun 的功能是:计算正整数num的各位上的数字之积。例如,若输入:...

Global site tag (gtag.js) - Google Analytics