以下是六个不同实现的比较,用于查找整数的因素:

function [t,v] = testFactors()

% integer to factor

%{45, 60, 2059, 3135, 223092870, 3491888400};

n = 2*2*2*2*3*3*3*5*5*7*11*13*17*19;

% functions to compare

fcns = {

@() factors1(n);

@() factors2(n);

@() factors3(n);

@() factors4(n);

%@() factors5(n);

@() factors6(n);

};

% timeit

t = cellfun(@timeit, fcns);

% check results

v = cellfun(@feval, fcns, 'UniformOutput',false);

assert(isequal(v{:}));

end

function f = factors1(n)

% vectorized implementation of factors2()

f = find(rem(n, 1:floor(sqrt(n))) == 0);

f = unique([1, n, f, fix(n./f)]);

end

function f = factors2(n)

% factors come in pairs, the smaller of which is no bigger than sqrt(n)

f = [1, n];

for k=2:floor(sqrt(n))

if rem(n,k) == 0

f(end+1) = k;

f(end+1) = fix(n/k);

end

end

f = unique(f);

end

function f = factors3(n)

% Get prime factors, and compute products of all possible subsets of size>1

pf = factor(n);

f = arrayfun(@(k) prod(nchoosek(pf,k),2), 2:numel(pf), ...

'UniformOutput',false);

f = unique([1; pf(:); vertcat(f{:})])'; %'

end

function f = factors4(n)

% http://rosettacode.org/wiki/Factors_of_an_integer#MATLAB_.2F_Octave

pf = factor(n); % prime decomposition

K = dec2bin(0:2^length(pf)-1)-'0'; % all possible permutations

f = ones(1,2^length(pf));

for k=1:size(K)

f(k) = prod(pf(~K(k,:))); % compute products

end;

f = unique(f); % eliminate duplicates

end

function f = factors5(n)

% @LuisMendo: brute-force implementation

f = find(rem(n, 1:n) == 0);

end

function f = factors6(n)

% Symbolic Math Toolbox

f = double(evalin(symengine, sprintf('numlib::divisors(%d)',n)));

end

结果:

>> [t,v] = testFactors();

>> t

t =

0.0019 % factors1()

0.0055 % factors2()

0.0102 % factors3()

0.0756 % factors4()

0.1314 % factors6()

>> numel(v{1})

ans =

1920

虽然第一个矢量化版本是最快的,但是由于自动JIT优化,等效的基于循环的实现(factors2)并不远.

注意,我不得不禁用强力实现(factors5()),因为它引发了内存不足错误(存储向量1:3491888400的双精度需要超过26GB的内存!).这种方法对于大整数显然是不可行的,无论是空间的还是时间上的.

结论:使用以下矢量化实现:)

n = 3491888400;

f = find(rem(n, 1:floor(sqrt(n))) == 0);

f = unique([1, n, f, fix(n./f)]);

matlab中长整数表示,matlab – 整数的因式分解相关推荐

  1. 如何用matlab编写混合整数规划,MATLAB中的混合整数线性规划

    我试图用MATLAB解决这个混合整数线性规划问题 . 但是,我在matlab中对线性目标函数和决策变量求和的定义存在问题 . 我在MATLAB中使用intlinprog函数 . 请在下面找到图片链接 ...

  2. matlab中fdyn,Matlab的用法总结

    1. 对序列进行洗牌 randperm() randperm()产生随机的序列 %if filepaths 是一个5*1的结构体,then cshuffle = randperm(length(fil ...

  3. matlab里markersize,Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的

    Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的 Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的关系 scatte ...

  4. matlab 程序文件,MATLAB程序文件

    <MATLAB程序文件>由会员分享,可在线阅读,更多相关<MATLAB程序文件(51页珍藏版)>请在人人文库网上搜索. 1.发表数学实验.教师穆志民.matlab软件的基础内容 ...

  5. matlab 信号生成,Matlab产生信号的方法

    实验一 常用信号的Matlab 表示及运算 一.实验目的 1.掌握Matlab 中表示信号的方法. 2.掌握Matlab 中信号运算的实现方法. 3.掌握在Matlab 中画信号波形的方法. 二.实验 ...

  6. 【MATLAB实验】MATLAB图形绘制相关函数与定积分计算

    MATLAB实验 Matlab中的图形 对数图.极坐标图及条形图 填充图 三维作图 与mesh相关的几个函数 Matlab符号运算 matlab的常见6大符号运算 matlab特殊函数与图形 定积分的 ...

  7. 【Matlab作业】MATLAB语言基础

    matlab版本:R2018a 1.向量的生成和运算 [练习] (1) 使用 logspace( )创建 1-4 π 的有 10 个元素的行向量. (2)使用linspace() 函数创建0~6之间的 ...

  8. matlab数组从零开始,MATLAB数组

    MATLAB数组 在 MATLAB中,所有的所有数据类型的变量是多维数组.向量是一个一维阵列,矩阵是一个二维数组. 我们已经讨论过的向量和矩阵.在本章中,我们将讨论多维数组.然而,在这之前,让我们讨论 ...

  9. matlab gmn信号,MATLAB优化设计实验课件.ppt

    <MATLAB优化设计实验课件.ppt>由会员分享,可在线阅读,更多相关<MATLAB优化设计实验课件.ppt(81页珍藏版)>请在人人文库网上搜索. 1.优化设计实验课件,现 ...

最新文章

  1. java下输出中文的一点研究
  2. dataframe 查找特定值_省时省力的查找引用函数
  3. 重构智能合约(中):平行宇宙与无限扩展
  4. C++中const关键字的使用总结
  5. 脚本录制两种模式 HTML-based script和URL-based script模式
  6. 双向关联一对一映射详解(2)
  7. 怎样快速学会python_python入门如何更快的学习
  8. CentOS搭建Ghost博客
  9. android 系统签名
  10. 黑马程序员pink老师_CSS学习笔记
  11. java自制语音识别,JAVA作的语音识别
  12. 如何使用Bootbox
  13. RJ45布线 568A 和568B布线标准
  14. 移动金融客户端应用软件备案、中国支付清算协会“聚合支付”业务备案、工业和信息化部网站备案系统(ICP备案)
  15. Python新手入门“制造 贺卡”
  16. EntityComponentSystemSamples学习笔记
  17. GAN生成对抗网络综述
  18. Python练习笔记 - - 句子翻转
  19. 混得再得意,憋在心里也别说这3种话,败事有余,背后挨刀子
  20. 锤子手机获工信部入网许可:清晰照曝光

热门文章

  1. 断电的方法关闭计算机,win7设置usb关机断电|win7设置usb关机拔出断电的解决方法...
  2. 地震时我先跑了教师挑逗网民抽人欲望
  3. java虚拟机学习笔记之垃圾收集(下)
  4. 对matplotlib.pyplot.cm.RdYlBu()的解读
  5. 自适应流媒体传输(四)——深入理解MPD
  6. 关于aPaaS平台的那些事儿
  7. 读心术程序c语言流程图,无聊的时候写的读心术小程序
  8. 海洋浮标在线监测系统由什么组成?
  9. XNA学习笔记(5)-调节刷新率(framerate)
  10. 用Power BI (Power query)高效做IPO上市项目账务梳理(财务总监CFO必看)