matlab中长整数表示,matlab – 整数的因式分解
以下是六个不同实现的比较,用于查找整数的因素:
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 – 整数的因式分解相关推荐
- 如何用matlab编写混合整数规划,MATLAB中的混合整数线性规划
我试图用MATLAB解决这个混合整数线性规划问题 . 但是,我在matlab中对线性目标函数和决策变量求和的定义存在问题 . 我在MATLAB中使用intlinprog函数 . 请在下面找到图片链接 ...
- matlab中fdyn,Matlab的用法总结
1. 对序列进行洗牌 randperm() randperm()产生随机的序列 %if filepaths 是一个5*1的结构体,then cshuffle = randperm(length(fil ...
- matlab里markersize,Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的
Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的 Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的关系 scatte ...
- matlab 程序文件,MATLAB程序文件
<MATLAB程序文件>由会员分享,可在线阅读,更多相关<MATLAB程序文件(51页珍藏版)>请在人人文库网上搜索. 1.发表数学实验.教师穆志民.matlab软件的基础内容 ...
- matlab 信号生成,Matlab产生信号的方法
实验一 常用信号的Matlab 表示及运算 一.实验目的 1.掌握Matlab 中表示信号的方法. 2.掌握Matlab 中信号运算的实现方法. 3.掌握在Matlab 中画信号波形的方法. 二.实验 ...
- 【MATLAB实验】MATLAB图形绘制相关函数与定积分计算
MATLAB实验 Matlab中的图形 对数图.极坐标图及条形图 填充图 三维作图 与mesh相关的几个函数 Matlab符号运算 matlab的常见6大符号运算 matlab特殊函数与图形 定积分的 ...
- 【Matlab作业】MATLAB语言基础
matlab版本:R2018a 1.向量的生成和运算 [练习] (1) 使用 logspace( )创建 1-4 π 的有 10 个元素的行向量. (2)使用linspace() 函数创建0~6之间的 ...
- matlab数组从零开始,MATLAB数组
MATLAB数组 在 MATLAB中,所有的所有数据类型的变量是多维数组.向量是一个一维阵列,矩阵是一个二维数组. 我们已经讨论过的向量和矩阵.在本章中,我们将讨论多维数组.然而,在这之前,让我们讨论 ...
- matlab gmn信号,MATLAB优化设计实验课件.ppt
<MATLAB优化设计实验课件.ppt>由会员分享,可在线阅读,更多相关<MATLAB优化设计实验课件.ppt(81页珍藏版)>请在人人文库网上搜索. 1.优化设计实验课件,现 ...
最新文章
- java下输出中文的一点研究
- dataframe 查找特定值_省时省力的查找引用函数
- 重构智能合约(中):平行宇宙与无限扩展
- C++中const关键字的使用总结
- 脚本录制两种模式 HTML-based script和URL-based script模式
- 双向关联一对一映射详解(2)
- 怎样快速学会python_python入门如何更快的学习
- CentOS搭建Ghost博客
- android 系统签名
- 黑马程序员pink老师_CSS学习笔记
- java自制语音识别,JAVA作的语音识别
- 如何使用Bootbox
- RJ45布线 568A 和568B布线标准
- 移动金融客户端应用软件备案、中国支付清算协会“聚合支付”业务备案、工业和信息化部网站备案系统(ICP备案)
- Python新手入门“制造 贺卡”
- EntityComponentSystemSamples学习笔记
- GAN生成对抗网络综述
- Python练习笔记 - - 句子翻转
- 混得再得意,憋在心里也别说这3种话,败事有余,背后挨刀子
- 锤子手机获工信部入网许可:清晰照曝光
热门文章
- 断电的方法关闭计算机,win7设置usb关机断电|win7设置usb关机拔出断电的解决方法...
- 地震时我先跑了教师挑逗网民抽人欲望
- java虚拟机学习笔记之垃圾收集(下)
- 对matplotlib.pyplot.cm.RdYlBu()的解读
- 自适应流媒体传输(四)——深入理解MPD
- 关于aPaaS平台的那些事儿
- 读心术程序c语言流程图,无聊的时候写的读心术小程序
- 海洋浮标在线监测系统由什么组成?
- XNA学习笔记(5)-调节刷新率(framerate)
- 用Power BI (Power query)高效做IPO上市项目账务梳理(财务总监CFO必看)