因数分解和模运算的方法

文档序号:6752928阅读:336来源:国知局
专利名称:因数分解和模运算的方法
技术领域
本发明总体涉及针对因数分解数字(factoring numbers)和模运算(modular arithmetic)的计算方法。更具体来说,本发明涉及利用数字多态相变材料(multistate phase change material)以非二进制方式执行因数分解和模运算。
相关发明信息本发明是2002年5月10日申请的美国专利申请号10/144319的部分继续申请。
背景技术
计算机的发展,被公认为二十世纪下半叶的最重要的进步之一。计算机简化了日常生活的方方面面,在经济中引起了生产力的显著提高。近来对图像处理和复杂计算的需要促进了微处理器速度和存储器存储密度的重大进步。计算机的进一步发展和未来应用,依赖于人类以越来越高效的方式处理更大数量的信息的能力。
硅是当今计算机的核心。计算能力和速度的提高,在很大程度上是更好地了解硅的根本特性并利用这些特性达到实际效果的结果。人们一开始预测通过硅制造诸如晶体管和二极管的基本电子元件上的进步,紧接着是来自集成电路发展的后来进步。近来的进步代表着这些趋势的继续,并且当前强调小型化和在单一芯片上集成数量更多的微电子器件。更小的器件导致更高的存储器存储密度、更高度集成的电路和在同一个芯片上的器件之间降低的交互时间。
基于硅的计算器件(devices)的一个内在特性是,数学运算和其它数据处理对象的二进制执行。在二进制计算中,计算媒介(computingmedium)硅有两个编程状态(programming states)可用于代表数据和处理数据。这两个编程状态通常被标记为″0″和″1″,被用来存储一个″0″或一个″1″的硅的体积被称作1位(bit)。包括数字和字母在内的数据,被转换成一个或多个″0″和/或″1″的序列,其中每个″0″或″1″被存储在一个不同的位中。这样,可以通过确立”0”和”1”的适当组合而对一个位的序列进行编程,以存储数据。数据的处理(Manipulations)涉及位运算,位运算按照要求的计算目的修改位的状态,以产生一个输出,该输出一般包括一个位的序列,其存储一个与在处理开始时出现所不同的″0″和/或″1″的组合或序列。
二进制计算机对于诸如自动化、字处理和基本数学计算等许多计算应用来说已经被证明是非常成功的。由于计算要求的膨胀和预见到的复杂应用,传统二进制计算具有许多局限正在变得更明显。例如,人们预测,更高的计算速度和更并行的运算在于继续缩小基于硅的微电子器件的能力。人们对于小型化的努力是否能继续的关心正变得更明显,因为许多人认为实际的根本限度将对小型化提出越来越不可逾越的障碍。通过传统的二进制方法,诸如那些需要自适应性、交互性或高度并行的处理的复杂计算情形看起来不能最优地实现,甚至不可能实现。
计算机产业要扩展,计算机要变得与更多的应用和更复杂的计算情形相关,就需要计算机工作方式的变化。

发明内容
本发明总体涉及通过非二进制计算方法扩展计算的能力范围。本方法被设计用于一种能够进行非二进制运算的计算媒介。非二进制运算可以用一种能处理多于两个编程状态的数字多态相变材料获得。本计算方法允许用一个包括多于两个编程状态的计算媒介进行计算。使用三个、四个或更多的编程状态的计算,可用本计算方法实现。
在一个实施例中,提供一种因数分解方法。该方法目的是确定输入数的乘法因子。该方法包括通过确立对应于一个潜在乘法因子的多个编程状态而按照该潜在乘法因子编程一个数字多态相变材料。可以赋予每个编程状态一个数值,不同编程状态之间的转换对应于对与编程状态相关联的数字的数学处理。编程状态相对于相变材料的重置状态(重置状态)在能量上是分离的,并可被选择使得与一个潜在乘法因子相关联的编程状态对应于相变材料的置位状态(set state)。以表征潜在乘法因子的数量的向相变材料的重置状态施加能量因此可以导致该相变材料的置位。置位转换容易因相变材料的电阻的变化而被检测到。通过分析对应于要被以表征潜在乘法因子的数量因数分解的数的能量,通过计算置位转换(以及每个置位转换后的重置)的次数并保证一旦已经提供了对应于要被因数分解的数的所有的能量则没有余数出现,完成因数分解。
在一个实施例中,可以采用一个给定的相变材料的体积来测试不同的乘法因子,具体步骤是顺序地按照一个乘法因子确立编程状态,确定该潜在乘法因子是否确实是个因子,以及通过重新确立(re-establishing)编程状态而对其它的乘法因子相应地重复。多态相变材料的一个内在特性是能以这样的方式定义和重定义编程状态,即在重置状态和置位状态之间的不同能量上安置不同数量的编程状态。因此,就有可能将置位状态对应于若干不同的潜在乘法因子的每一个。
在一个选择性的实施例中,可以用区别体积的相变材料来测试不同的乘法因子。在这个实施例中,将一个不同的量的相变材料专用于有关的每个潜在乘法因子,并通过确定一个适当数量的编程状态而被相应地编程。在这个实施例中,通过顺序地或者并行地对区别体积的相变材料进行操作,可以测试大量潜在乘法因子。并行操作提供高效的数的因数分解。
本方法也提供在模运算构架中的计算。这些方法包括用于在由模数支配的算术体系中的余数和恒等关系(congruence relationships)的计算。
附图简介

图1是一个作为被提供的能量或功率的量的一个函数的代表性相变材料的电阻的图表。该图表包括左边的一个置位前(pre-setting)高电阻平台(high resistance plateau)和右边的一个置位后(post-setting)区域(region)。两个区域中的代表性状态都是示意性地被表示的。
图2是用来测试如例1中所述的、数字4是否是一个输入数的乘法因子的相变材料的电阻图表的局部。图中表示了沿置位前高电阻平台和处于置位状态的电阻。5个编程状态被用符号标记。
具体实施例方式
本发明通过提供适合用于能以二进制方式操作的计算媒介的计算方法,代表在克服传统的二进制计算器件的局限方面的进步。本发明的发明人相信,非二进制计算方法提供了增强计算机的功能和扩展计算机应用范围的机会。如在共同待审定的母案申请(美国专利申请序列号10/144319)中所讨论的那样,非二进制计算是有利的,因为它可提供更高的信息存储密度和更并行的数据处理。
非二进制计算的实现,包括确定一种能维持三个或更多的编程状态的计算材料和开发能以非二进制方式存储和处理数据的计算方法。共同待审定的母案申请(美国专利申请序列号10/144319)确定相变材料为可以被编程得提供适合于非二进制计算的多态特征的材料的例子。下文给出作为提供多态编程和计算功能的相变材料的一些相关属性的总结。进一步的细节包含在共同待审定的母案申请(美国专利申请序列号10/144319)中。
适合于非二进制运算的相变材料,包括那些具有至少一个高阻状态和一个可检测到是不同的低阻状态的相。本文中所用的高阻状态和低阻状态,指的是分别具有高电阻和低电阻特征化的物理状态,其中,高电阻状态和低电阻状态的高电阻和低电阻是互相相关的并且可检测是互相不同的。这种相变材料的例子,在相同受让人的美国专利5,166,758、5,296,716、5,524,711、5,536,947、5,596,522、5,825,046和5,687,112中记载,特此引用这些专利的内容作为参考。例证性的相变材料,是那些包括元素In、Ag、Te、Se、Ge、Sb、Bi、Pb、Sn、As、S、Si、P、O的一个或多个及其混合物或合金的相变材料。在一个优选实施例中,相变材料包括一种氧属元素。尤其首选的是包括与Ge和/或Sb组合的氧属元素的相变材料。在另一个实施例中,相变材料包括一种氧属元素和一种过渡金属,诸如Cr、Fe、Ni、Nb、Pd、Pt或其混合物和合金。
在施加有效量的能量后,相变材料可以从高阻状态被转换到低阻状态。这里公开的图1,是一个作为能量或功率的函数的相变材料的电阻的图表。如果相变材料以一开始处于高阻状态,少量能量的施加让该材料留在其高阻状态。这个性能(behavior)由图1的左边的高阻平台(plateau)区域刻画。但是,如果施加足够数量的能量,相变材料就从其高阻状态转换到其低阻状态。这个转换由图1的紧邻高阻平台区域的右边的电阻的急剧降低刻画。相变材料从其高阻状态向其低阻状态的这个转换,被称作“置位”(″setting″或″to set″)相变材料。在置位后所产成的低阻状态,自此以后被称作相变材料的″置位状态″。足以置位相变材料的一定数量的能量,自此以后被称作″置位能量″(setting energy)。注意到对于沿着高阻平台的每个状态来说,置位能量是不同的。
图1的右边对应于相变材料已经被置位时相变材料的性能。一旦置位,相变材料就处于其低阻状态,受到按照图1的右边所示的置位后区域的功率(power)的施加的影响。这个部分的电阻响应曲线,在以上引用作为参考的几个美国专利中已经被称作曲线的模拟或灰度多位部分(analog or greyscale multibit portion)。对相变材料的置位后状态施加的能量产生电阻的变化。电阻的变化由所施加的能量的量以及施加能量的比率(rate)确定。提供能量的比率,自此以后被称作功率,这是相变材料在置位后区域中的特性的一个重要因素。
尽管不希望受理论约束,发明人相信,在置位转换期间低阻置位状态的确立,是在相变材料中形成一个毗连的晶体通道(crystallinepathway)的结果。在置位前区域中,相变材料被认为包括一个无定形相成分(amorphous phase component)以及可能的一个晶相(crystalline phase)成分。晶相的存在和相对丰度,取决于在相变材料的形成过程中所使用的制备和处理条件。例如,包括溶化后紧接着迅速淬火的处理,可以被预期是抑制晶体化的;而溶化后紧接着慢速淬火,则可以被预期是促进晶体化的。如果出现在置位前的区域中,晶相在无定形相中扩散,不能提供一个穿过相变材料的毗连的通道。由于无定形相比晶相有更高的电阻,如果没有一个毗连的晶体网络(contiguous crystalline network),则导致相变材料在置位前的区域中的高电阻。
发明人相信,在电阻曲线的置位前的高阻平台区域中施加能量,增加相变材料内晶相的相对丰度。假若不形成毗连的晶体网络,晶相的增加的丰度对相变材料的电阻没有实质的影响。发明人认为,毗连的晶体网络的形成在置位转换期间发生,并且认为伴随着置位转换的电阻的减少是具备穿过毗连的晶相的传导通道的结果。由于毗连的晶体网络比无定形相有更低的阻抗,毗连的晶体网络的存在导致相变材料在置位后的更低的电阻。
在置位后区域,能量被施加到低阻置位状态,并可影响晶体网络。能量的增加可导致加热和相变材料的温度的上升。如果把足够的能量施加到相变材料,则有可能熔化或以其它方式热瓦解(thermallydisrupt)置位时出现的毗连的晶体网络。如果发生熔化,随后的冷却很可能导致相变材料具有一个晶相成分的不同丰度或连接。晶相网络的熔化或热瓦解可破坏穿过较低电阻晶相的传导通道,并由此导致置位后区域中相变材料的电阻的增加。晶相网络的熔化或热瓦解需要足够的能量维持在熔化或热瓦解的地方,以允许熔化或热瓦解。由于热传导、热容量(heat capacity)和向环境的损失所引起的散热过程起着消除能量的作用,并因此抑制晶相网络熔化或热瓦解,能量增加的比率必须足够高,以允许熔化或热瓦解,与此同时补偿散热过程。因此,能量的比率或功率(power)是电阻曲线的置位后区域中需要考虑的一个重要事项。
因为置位后区域的特性是可逆的,视图1的置位后区域中的功率和相变材料的状态而定,可能发生电阻的增加或减少。这个可逆性由图1的置位后区域中所示的两个箭头表示,并且发明人认为,其反映了改变相变材料中晶体网络的性质的可逆能力。可以把置位后区域中的每个点与一个功率或电阻相关联。如果所施加的功率超过与描述置位后区域中的相变材料的点的相关联的功率,相变材料的电阻增加。相反,如果所施加的功率小于与描述置位后区域中的相变材料的点的相关联的功率,电阻减少。发明人认为,置位后区域中电阻的增加,反映相变材料的晶体成分的这样一种方式的中断或重配置(interruption or reconfiguration),该方式即是穿过晶体成分的传导通道的数量、大小或容量被减少;对于置位后区域中电阻的减少,情况相反。
可逆性局限于图1的置位后区域。通过施加对应于图1的在置位转换前的(即在置位转换的左边)高阻平台区域中一个点的能量,是不可能逆转置位转换的。然而,通过向由图1的置位后区域中的一个点描述的材料施加足够高的功率,则有可能恢复相变材料的高阻状态。施加这样的功率,对应于在图1中向右的方向上移动,而不是在逆转置位转换的方向上移动。如图1的在置位后区域中所示,施加连续增加数量的功率,导致电阻的连续增加。当为驱动相变材料向图1的最右端而施加足够的功率之后,相变材料返回到其高阻状态并恢复其高阻平台。发明人认为,高阻平台的恢复,在向相变材料提供的功率足以破坏相变材料的任何晶体成分的毗邻(contiguousness)时发生。高阻平台的恢复,可能因为相变材料中晶体成分的丰度的减少(例如因为经过增加无定形成分的丰度的熔化和淬火过程)、晶体成分以丧失毗邻的方式的重配置或再分配(redistribution)或它们的组合而发生。
把相变材料从其低阻置位状态转换到其高阻状态所需的功率或能量的比率,自此以后被称作“重置功率”、“重置能量”等等。在施加重置能量结束时相变材料的状态,自此以后被称作“重置状态”。重置功率的施加“重置”相变材料,产生一个高阻重置状态。在重置后紧接着进一步施加能量所观察到的性能,与对图1的高阻平台区域所作的描述的相似。图1中的图对应于置位和重置的一个循环。相变材料能被可再现地在大量的循环中置位和重置。
用沿着图1的左端中表示的高阻平台区域的状态,可获得用于非二进制计算的多个编程状态。以小于置位所需的量的能量—自此以后被称作“亚置位量的能量”(sub-setting amount of energy)—向处于高阻状态的相变材料的施加,导致材料的物理变化,但不在材料上改变其电阻。向由图1的平台区域中的第一点描述的相变材料施加一个亚置位量的能量,把该相变材料转换到由平台区域中的第二点所描述的物理状态,其中第二点在第一点的右边。通过施加亚置位量的能量,不可能在高阻平台区域中在向左的方向上转换相变材料。以上所述的用于图1的置位后的、模拟的多位部分的可逆性的概念,不适用于置位前的、数字的多态高阻平台。高阻平台区域中的一个初始点的左边的点,可以通过置位该相变材料、重置该相变材料、然后施加一个适当的亚置位量的能量而到达。
由于高阻平台区域中的单向响应,相变材料能积累并存储能量,以至其量达到该材料的置位能量。尽管在高阻平台区域相变材料的电阻不变化,每个亚置位的能量施加,使相变材料可预测地朝低阻置位状态渐进。相变材料的这个性能可被用于诸如这里所披露的多态计算方法。
在一个优选实施例中,选择重置状态作为图1的高阻平台区域内的起点。把相变材料从其重置状态转换到其置位状态所需的能量的间隔(interval),自此以后被称作“重置状态的置位能量”。由于重置状态的置位能量是一个在多个置位和重置循环中可再现并且不变的特性,可以将其划分为两个或更多的子间隔(sub-intervals),相变存储器材料的不同的编程状态或编程值,可以由子间隔能量施加的不同次数或组合定义或者与子间隔能量施加的不同次数相关联。图1的高阻平台区域中的相变材料的可再现的单向性能,提供一种按照以子间隔的量被施加到材料上的能量的累积的量确立不同的编程状态的能力,其中,可以为每个不超过重置状态的置位能量的能量的累积的量定义以不同的编程状态。
按照由一个亚置位系列的能量的子间隔的施加而向重置状态施加的能量的累积的量,能唯一地和可再现地定义一个不同的编程状态集合。例如,可以把一个第一个编程状态与向重置状态施加一个第一子间隔量的能量相关联。向处于第一编程状态的相变材料第二次施加第一子间隔量的能量来定义一个第二编程状态。可以选择将一个第二编程状态与向重置状态单次施加一个第二子间隔量的能量相关联,第二子间隔量的能量不同于第一子间隔量的能量。子间隔量的能量的顺序施加和组合,可被用来定义贯穿图1的高阻平台区域的一系列编程状态,其中可依照相对于重置状态的能量的量区别不同的编程状态。
能量的子间隔的施加的多个序列和组合,构成用于确立可由本发明计算方法和非二进制计算方法通常使用的编程状态的实施例。在有些实施例中,只有高阻平台区域内的状态被算作编程状态。在其它实施例中,把在相变材料变换到其其低阻状态时而获得的置位状态算作一个额外的编程状态。当施加到重置状态的累积的量的能量达到重置状态的置位能量时,相变材料置位。置位后,相变材料在进一步施加能量时的性能由图1的置位后区域控制。
本发明中使用的相变材料具有从重置状态延伸到置位状态的状态的连续统一体(continuum)。这些状态包括重置状态、沿着高阻平台的一系列的中间状态和置位状态。中间状态和置位状态可以通过向重置状态施加能量而获得。因此可以把与相变材料向关联的状态看作构成一个相对于重置状态在能量上可区别的状态的连续统一体。上文所述的编程状态是从这个状态的连续统一体中选择的。编程状态一般与诸如整数的离散数据值相关联,并且具有与为把相变材料转换到编程状态而需要向相变材料的重置状态增加的能量相应的编程能量(programming energies)。例如,某特定编程状态具有一个与为把相变材料转换到该编程状态而必须向相变材料的重置状态增加的能量的量相应的编程能量。编程状态的编程能量因此是相对于重置状态的一个测量(measure),并且每个编程状态都与一个唯一的编程能量向关联。
在一个优选实施例中,每个编程状态都有一个被赋予该编程状态或与该编程状态相关联的唯一的数据值。在另一个优选实施例中,按增加的编程能量的顺序,把连续的整数赋予编程状态或与编程状态相关联。在这些实施例中,可以通过把一个相变材料转换到与一个数字相关联的编程状态而存储该数字。数字值与编程状态的唯一性对应关系,提供了在相变材料的一个不同状态中存储任何一个数字范围的能力。多个数字或者某特定数字的多个数位,可被存储在一相变材料的多个部分。一般可以通过按照计算目的提供实现在一个或多个编程状态中的转换所需的能量而进行计算。
如上所述,每施加一个子间隔量的能量,就导致高阻平台中的相变材料朝置位状态前进。即使沿高阻平台的重置和中间状态有实质上相同的电阻、因此不能根据电阻区别,沿高阻平台的每个状态依然能可检测地与其它状态区分,因为置位由沿高阻平台的不同的点描述的相变材料需要不同量的能量。例如,如果施加一个量的能量,以便把沿高阻平台的一个第一点所描述的相变材料转换到沿高阻平台的一个第二点,把由第二点所描述的相变材料转换到置位状态所需的能量的量正好小于把由第一点所描述的相变材料转换到置位状态所需的能量的量。由于置位状态是相对于沿高阻平台的可检测地不同的低阻状态并且置位沿高阻平台的任何点所描述的相变材料所需的能量的量是能确定的,所以沿高阻平台的不同点是可区分的,并且沿高阻平台的每个点可以与一个不同的编程状态和/或数字值相关联。因此,通过通过把从重置状态到置位状态的能量间隔划分成适当个数的子间隔,在图1的高阻平台区域内几乎可以定义几乎任何数量的编程状态。因此可以把高阻平台区域子划分成可用于数据的存储和处理的一系列的离散的编程状态。一个相变材料不限于如当前的二进制计算机中那样的两个编程状态,而是可以提供非二进制多状态程序设计的计算能力。
编程状态的个数,取决于与相变材料从其重置状态(或其它起始状态)向其置位状态的转换相关联的能量间隔的大小(重置状态或起始状态的置位能量的大小),以及取决于把这个能量间隔划分成子间隔所可能的分辨率(resolution),以及诸如与具有一定数量的编程状态相关联的相对计算或处理优势等的实际考虑。这里所使用的起始点或初始点,指的是沿高阻平台的第一个或最低能量。最好让重置状态是起始状态,并且自此以后,除非另有说明,否则将假设重置状态为起始状态。然而应当认识到,可以选择沿高阻平台的一个不同的状态作为起始状态。
重置状态与置位状态之间的能量间隔的大小,可受相变材料的化学成分的影响。对子间隔的定义所使用的分辨率取决于可从被用于编程、转换或读取相变材料的能量源获得的能量分辨率(energyresolution)。适合于按照本发明计算方法在相变材料的各状态之间转换相变材料的能量源,在美国专利申请(系列号10/144319)有更完整的说明。从计算的观点来说,编程状态的个数,可影响计算方法或算法的性质、速度、并行性或方便性。例如,选择编程状态的个数为2的倍数,可允许改编当前可用的二进制方法,以用于本发明的非二进制计算方法。例如,本发明包括有包括4、8、16、32、64等个的编程状态的实施例。使用10个编程状态,允许方便地实现日常事务中使用的根据传统的十进制系统的方法,这也包含在本发明的实施例中。如下文中所讨论的那样,本发明计算方法使用一个具有对应于潜在乘法因子的数量的相变材料也是合乎需要的。
适合用于本发明计算方法和算法的相变材料的例子,在美国专利号5,166,758、5,296,716、5,524,711、5,536,947、5,596,522、5,825,046、5,687,112、5,912,839、3,271,591和3,530,441中提供,特此引用这些专利的内容作为参考。存储器材料中可包含介电材料和相变材料的混合物。这种混合物的例子在共同受让人的美国专利6,087,674中描述,特此引用这些专利的内容作为参考。适合本发明计算方法的材料一般包括元素In、Ag、Te、Se、Ge、Sb、Bi、Pb、Sn、As、S、Si、P、O中的一个或多个或者它们的混合物和合金。在一个优选实施例中,相变材料包含氧属元素。在另一个优选实施例中,相变材料包含氧属元素和Ge。在一个更优选的实施例中,相变材料包含Ge、氧属元素和Sb。在一个最优选的实施例中,相变材料包含Ge、Te和Sb。
本发明计算方法包括涉及向相变材料提供或施加能量的步骤。能量的提供或施加,可由任何能够向相变材料传输一个可控量的能量的源完成。假设所提供的能量可具有包括电、光和/或热的许多形式。一个可控量的能量自此以后也可被称作“能量脉冲”。“置位脉冲”是一个足以置位一个相变材料的能量脉冲,相当于提供一个置位量的能量。“重置脉冲”是一个足以重置一个相变材料的能量脉冲,相当于提供一个重置量的能量。
在本发明计算方法中,许多步骤或操作都是通过向相变材料提供具有一个表征一个数字的数量的能量而完成的。表征能量可取决于相变材料的重置状态的置位能量、编程状态的个数、以及把相变材料从一个编程状态转换到下一个编程状态所需的子间隔能量。在一个实施例中,表征或对应于一个数字的能量是一个与该数字成比例的量的能量。使一个编程状态前进到下一个编程状态所需的子间隔能量,自此以后被称作“编程间隔”(programming interval/program interval)、“编程间隔能量”(program interval energy)、“编程脉冲”(programpulse)、“递增能量”(increment energy)、“递增间隔”(incrementinterval)或它们的等同物。
这里所用的从一个编程状态到下一个编程状态的前进,意味着相变材料从其现有的编程状态向沿相变材料的电阻曲线所定义的下一个编程状态的转换。这个下一个编程状态必定有一个比现有的编程状态向对于相变材料的重置状态的更高的能量,并且对应于沿电阻曲线上在现有的编程状态右边的编程状态。术语“递增”、“施加递增的能量”等等指的是把相变材料从一个现有的编程状态转换到能量上最接近的并且在电阻曲线上位于现有的编程状态右边的编程状态。因此,递增意味着相变材料在电阻曲线上向右的方向上一次一个编程状态的转换。
在本发明的一个实施例中,重置状态代表数字零,用一个均匀的递增能量来把一个编程状态前进到下一个。结果,所有的编程状态在能量上是相等地分隔的,递增能量的每次施加相当于把所存储的数字增加1。因此,通过向重置状态施加一次递增能量,可以存储数字″1″;通过向重置状态施加二次递增能量,可以存储数字2,如此等等,一直到可存储的最大的数字的存储器材料的体积被用来存储该数字。均匀的递增能量的施加,自此以后也被称作“均匀的递增脉冲”或其它等同的术语。
前述的其中使用非均匀编程间隔或非相等递增间隔的实施例的变体被用作构成本发明的额外的实施例。这里所用的非均匀(non-uniform)编程间隔指的是其中的编程状态不是在能量上有相等的间距的任何编程间隔的序列。换言之,在沿高阻平台的不同点处,相邻编程状态之间的递增能量可能是不同的,因此,例如分隔第一编程状态与第二编程状态的递增能量可能不同于分隔第二编程状态与第三编程状态的递增能量,等等。在这样的实施例中,递增能量可能不是恒定的,但是递增的概念仍然指的是增加或提供足以把相变材料从一个编程状态转换到相对于重置状态来说能量更高的下一个编程状态的数量的能量。同样,递增(incrementing)相变材料指的是为把相变材料从一个初始编程状态转换到一个最终编程状态而提供能量,其中,在初始编程状态与最终编程状态之间没有编程状态存在。与递增相变材料相关联的初始和最终编程状态在这里也可被称作相邻的或连续的编程状态。
相变材料的编程状态的确立,在这里被称作编程策略(programmingstrategy)。一个编程策略包括一个规定的能量的子间隔施加的序列,其中明确地定义了从一个编程状态到下一个编程状态的编程间隔,以及从重置状态到每个编程状态的累积的施加的能量。这样,就确立了一个编程状态的组合,其中的每个编程状态有一个唯一的相对于重置状态的编程能量。编程策略可以以从重置状态延展到置位状态的均匀的或非均匀的编程间隔的任何组合为基础,可以包括或者可以不包括重置状态或置位状态作为编程状态。除非另外指出,否则,下文中的讨论以使用均匀编程间隔的编程策略为基础。然而应当认识到,这个选择是为了方便讨论,并不代表对本发明的实践的限制。
可能包括在编程策略内的,是数据或数字值向编程状态的分配或与编程状态的关联,使得每个编程状态对应于一个不同的数据值或数字。通过相变材料在其各编程状态之间的转换,可以实现计算。例如,按照一个数学目的将一个输入数向一个输出数的变换,可以通过明智地提供把相变材料从相当于输入数的编程状态转换到相当于输入数的编程状态的能量而实现。优选地,与编程状态相关联的值是整数。更优选的,整数是连续的。设想了其中以编程能量的增序或降序关联整数值的实施例。例如,如果把重置状态与数据值0相关联,则施加一个编程间隔的能量把该材料置于一个与数据值1相关联的编程状态,施加另一个编程间隔的能量把该材料置于一个与数据值2相关联的编程状态,如此等等。或者,也有可能以编程能量的降序把数据值与编程状态相关联。例如,如果把置位状态与数据值0向关联,则向其施加一个编程间隔的能量以获得置位状态的编程状态与与数据值1相关联,如此等等。数据值与编程状态的关联,可以各种方式完成,以方便特定的计算或用户偏好。
本发明计算方法适合用于非二进制计算媒介。这里所用的非二进制计算媒介,指的是具有三个或更多的编程状态的材料。二进制计算媒介提供两个编程状态(这两个状态通常被标记为″0″和″1″),然而,非二进制计算媒介提供多于两个的编程状态。例如,三状态的非二进制计算介质可提供被标记为″0″、″1″和”2”的状态。具有多于三个状态的更高级的非二进制计算媒介可以被类似地定义。
为了实现非二进制计算的好处,有必要阐明针对非二进制计算媒介的多态性质的计算的方法。加、减、乘、除的方法已经在共同待审定美国专利申请10/144319中描述。本发明方法针对数字的因数分解以及在模运算架构内的计算。一个因数分解方法包括确定某特定数字是否是另一个数字的乘法因子。另一个因数分解方法包括确定某特定数字的乘法因子的完整集合。在一个优选实施例中,确定某特定数字的素数因数(prime factors)。模运算的方法包括确定余数、涉及余数的计算以及数字在剩余类(residue classes)中的分类。
因数分解方法一个因数分解方法包括确定一个数字是否是另一个数字的乘法因子。该方法一般要求输入要被因数分解的数字以及潜在乘法因子,返回对该能的乘法因子是否确实是个乘法因子的判定作为输出。该方法包括为一个相变材料定一个编程策略,其中按照一个潜在乘法因子确立编程状态。编程状态的确立,包括为相变材料定义一定数量的编程状态,使得从重置状态转移到置位状态所需的递增的个数等于该潜在乘法因子。编程策略包括规定每个编程状态的编程能量,其中编程能量是提供给相变材料的重置状态以将其转换到编程状态而需要的能量。一旦确立每个编程状态的编程能量,相邻编程状态之间的递增间隔也被确定,于是就知道把相变材料从一个编程状态转换到下一个编程状态所需的能量的递增。
一旦为某特定潜在乘法因子定义了编程策略,就可以确定该潜在乘法因子是否确实是一个按照需要被因数分解的数字的因子。这个确定包括重置该相变材料并递增之,递增的次数等于需要被因数分解的数字。这个递增在这里也可被称作需要被因数分解的数字的递增。当递增的次数等于潜在乘法因子时,相变材料置位。相变材料的置位状态具有一个比编程策略中包括的其它状态的更低的电阻,容易通过对电阻的测量而检测到。例如,相变材料每次被递增时,可以测量电阻,以确定是否相变材料处于其置位状态。在本发明的因数分解方法中,在按照需要被因数分解的数字的递增期间,相变材料每次在它置位时被重置。当递增结束时,判断该潜在乘法因子是否确实是个因子。如果在按照需要被因数分解的数字的递增结束时,相变材料处于其置位状态,则该潜在乘法因子确实是个因子。
由于该方法所采用的编程策略,递增在置位状态的终止对任何因子来说是个必要条件。一个潜在乘法因子在需要被因数分解的数字中的每次出现都导致相变材料的置位。因此,如果相变材料在递增结束时处于其置位状态,该潜在乘法因子是需要被因数分解的数字的一个除数,因此是需要被因数分解的数字一个因子。如果潜在乘法因子确实是个因子,它的辅助因子(co-factor)(即与之相乘能得到要被因数分解的原始数的数)可以通过计算在递增期间相变材料被置位的次数而确定。如果相变材料处于除其置位状态以外的状态,则该潜在乘法因子不是一个因子。
本发明的因数分解方法提供按照多个潜在乘法因子进行因数分解。使用一个单一的按照不同乘法因子编程的器件,可以顺序地检测不同的乘法因子。第一乘法因子可以用一个基于它的第一编程策略检测,其中,把相变材料从其重置状态转换到其置位状态所需的递增的次数等于该第一乘法因子。第二乘法因子可以用一个基于该第二乘法因子的第二编程策略类似地检测。一个包含相变材料的计算媒介提供通过定义和再定义(redefining)编程状态按照不同的乘法因子编程和再编程(reprogram)一个给定体积的相变材料的能力。对于一个给定体积的相变材料来说,分隔编程状态的编程状态和能量状态的个数可以不同,以适应不同的乘法因子。通过按照所涉及的乘法因子的范围改变编程策略,有可能用一个给定体积的相变材料确定一个数字的因子。因此可以用包含一个相变材料的单一器件完成因数分解。
也可以用每个都被按照一个不同的乘法因子编程的多个体积的相变材料来实现因数分解。在这个实施例中,可以用多个器件来实现因数分解。按照要被因数分解的数字的递增,是在被按照不同的乘法因子编程的一系列的器件的每个上实现的。向多个器件的每个,施加相同次数的递增。该递增可一次一个递增地在所有器件上执行,可以以接连从系列中的一个器件到另一个器件连续完全递增的方式,或者通过在所有器件上递增和多次递增个别器件的组合的方式,完全地递增每个器件。类似地,每个个别器件可以有一个用于提供由该器件的编程策略所规定的量的递增能量的专用能量源,一个具有按每个器件的编程策略的规定向多个器件的每个提供不同数的能量的能力的共享能量源可被用来递增,或者可以使用专用和共享能量源的某种组合。从在所有器件上的并行操作方式到顺序考虑个别器件的范围的实施例都是可能的。通过包括足够数量的按照潜在乘法因子的全部范围编程的器件,有可能确定一个数字的所有乘法因子。在一个优选实施例中,按照素数因子编程的器件被包括并被用于确定数字的素数因子。
例1在这个例子中,上文所述的因数分解方法被用来检测数字4是否是数字32的因子。要被因数分解的数字是32,潜在乘法因子是4。该方法的实现,从按照潜在乘法因子确立编程状态开始。在这个例子中,编程策略要求以这样的方式确立相变材料的编程状态,即4个递增把相变材料从其重置状态转换到其置位状态。实现编程策略的一种方式是让置位状态是对应于四个递增的编程状态,让重置状态是对应于零递增的编程状态,并选择重置状态与置位状态之间的三个中间状态作为对应于一个、两个和三个递增的编程状态。这三个中间状态可以位于沿相变材料的电响应曲线的高阻平台的任何位置。在一个优选实施例中,这三个编程状态被选择得使得连续的编程状态之间的递增间隔是均匀的。这个实施例是优选的,因为提供被用来从一个编程状态向下一个编程状态递增的能量的能量源只需要以恒定的量提供能量。如果提供例如能量脉冲形式的能量,则可以施加把相变材料从一个编程状态转换到下一个编程状态的恒定能量的递增脉冲。非均匀的递增间隔落在本发明的范围内,但是不那么优选,因为由能量源提供的能量在递增期间可能需要变化。
这里的图2描述了在本例的上下文中的一个编程策略。该图表示的相变材料的电响应曲线的一个局部,包括高阻平台和与置位转换相关联的电阻的急剧降低。图2的实施例表示了由均匀的能量间隔分隔的编程状态,从一个编程状态到下一个编程状态的递增能量是恒定的。各编程状态被用从0开始的整数标记,其中标记为0的状态是重置状态,标记为4的状态是置位状态,图中显示了标记为1、2和3的三个中间状态。编程状态的标记也可被看作是赋予编程状态的或者与编程状态相关联的整数数据值。在本例的编程策略的上下文内,把相变材料从其重置状态转换到其置位状态需要4个能量的递增。
为了确定4是否是32的因子,把具有如这里的图2中定义的那些编程状态的相变材料转换到其重置状态,并递增32次,同时在它每次置位时提供该相变材料的重置。提供一个递增能量把该相变材料从编程状态0转换到编程状态1。第二个递增把相变材料转换到编程状态2,如此等等。在编程状态3中递增相变材料,使相变材料置位到编程状态4。相变材料的置位,可以通过测量电阻或者置位状态的某个其它特性特征而检测到。电阻是一个优选的测量对象,因为这是方便的,并且容易地允许置位状态的确定。电阻可以在相变材料的每次递增之后测量。在检测到置位状态后,相变材料先被重置,然后开始进一步的递增。在这个例子中,将第5个能量递增增加到重置状态,把相变材料从编程状态0转换到编程状态1,然后在必要重置时,开始进一步的递增。
在递增32次后,评估相变材料的状态。如果相变材料处于其置位状态,潜在乘法因子确实是个因子。在这个例子中,相变材料在递增32次后处于其置位状态,因此得出4是32的乘法因子的结论。通过计算相变材料的置位的次数,也可以确定辅助因子。在这个例子中,相变材料置位8次。因此可知在本例中4的辅助因子是8。
在上文的例1的方法的一个实现中,用Ge2Sb2Te5作为相变材料,使用电能脉冲形式的递增能量。电能脉冲可以以脉冲电压和脉冲持续时间为特征。脉冲电压也可被称作脉冲高度或脉冲幅度,脉冲持续时间也可被称作脉冲宽度。在1.5V的脉冲电压下,在施加一个具有320ns的持续时间的脉冲后,相变材料可从其重置状态转换到其置位状态。由于5个编程状态(4个编程间隔)被用来检测潜在乘法因子4,并且由于编程状态被选择得是均匀地分隔的,因此选择了由一个对应于施加80ns的1.5V脉冲的能量的能量分隔的编程状态。施加1.5V、80ns的脉冲,提供的能量足以把相变材料从一个编程状态转换到下一个编程状态。例如,向编程状态0施加1.5V、80ns的脉冲,把相变材料转换到编程状态1,如此等等。
例2在这个例子中,作出7是否是27的因子的判断。这个例子可以以类似于上述的例1的方式完成。在这个例子中,要被因数分解的数字是27,潜在乘法因子是7。因此,为了判定7是否是27的因子,必须按照潜在乘法因子7编程相变材料。合适的编程策略是以这样的方式定义编程状态,即需要7个递增才能把相变从其重置状态转换到其置位状态。可以选择重置状态为编程状态0,置位状态为编程状态7,6个中间编程状态标记为1、2、3、4、5、和6。例2中相对于例1的更高的编程状态个数意味着,对于某特定的相变材料来说,例2中编程状态之间的平均能量间隔比例1中的小。通过调整由能量源提供的能量,以匹配分隔所选择的编程状态所需的能量间隔,可以取得适当的递增间隔。例如,在能量源提供电流或电压脉冲形式的能量的情况下,每个脉冲的能量内容可以通过调节脉冲高度和/或持续时间而改变。
在按照潜在乘法因子7确立编程状态之后,可以开始按照要被因数分解的数字的递增。在这个例子中,需要相变材料的27次递增。相变材料被重置。递增相变材料7次,把相变材料转换到其置位状态,紧接着,相变材料被重置,然后进行进一步必要的递增和重置,直到已经提供了27次递增。在这个例子中,在21次递增后相变材料处于其置位状态,然后自开始递增以来被第三次重置。额外的6次递增脉冲把相变材料转换到编程状态6。27次地增之后,检测相变材料的电阻,发现相变材料并非位于其置位状态,于是得出7不是27的因子的结论。如果把整数值与编程状态相关联,使得编程状态1对应于数字1等等,则进一步的结论为6是27除以7的结果的余数。对余数的进一步讨论,在下文中所述的对本发明的模运算方法的讨论中给出。
例3
在这个例子中,用多个体积的相变材料来检测多个潜在乘法因子。每个体积的相变材料可被看作是一个按照一个不同的潜在乘法因子编程的器件的计算媒介。通过按照要被因数分解的数字递增每个这样的器件,有可能确定多个潜在乘法因子哪些真的是乘法因子。通过举例说明,判断12的乘法因子。
在一个实施例中,可以通过包括按照具有12或更小的值的潜在乘法因子编程的器件确定12的乘法因子。在这个实施例中,使用按照数字1-12编程的12个器件,这些器件的每个被递增12次。如上文所述,一个按照某数字、例如按照X编程的器件或相变材料的体积,需要从其重置状态转换到其置位状态的X次递增。在递增期间,每个器件在每次到达其置位状态时就被重置,然后再如上文所述地进一步递增。当递增完成后的被发现处于置位状态的那些器件对应于作为12的真正的乘法因子的数字。在这个例子中,很明显,按照1、2、3、4、6、和12编程的器件,在递增结束时处于它们的置位状态,因此是12的乘法因子。也可以计算按照一个乘法因子编程的器件的每个在递增期间被置位的次数,以允许确定与每个乘法因子相关联的辅助因子。按照5、7、8、9、10和11编程的器件,在递增结束时处于置位状态以外的状态,因此被确定不是12的乘法因子。
本例中包括的多个器件的每个,可以先单个地被完全地递增,然后再递增下一个器件(串行方式);可以先向所有器件施加一个递增,再向任何一个器件提供进一步的递增(并行方式);或者在递增过程中使用串行方式和并行方式的某种组合。可以为每个器件使用一个单独的专用能量源,该能量源被配置得提供由该器件的编程策略所规定的递增能量,可以使用一个能够提供可变的递增能量的单一能量源,或者使用专用和可变能量源的组合。
如果多个器件的每个使用相同的相变材料,则分隔均匀的编程状态的能量间隔对于按照不同的潜在乘法因子编程器件来说将是不同的。例如,按照数字9编程的器件,与按照数字5编程的器件相比,将具有更小的编程状态之间的均匀能量间隔。在这种情况下,如果提供具有固定脉冲幅度的电流或电压脉冲形式的能量,则可向每个器件施加相同数量的递增脉冲,其中脉冲宽度依据用来确立每个器件的编程策略的潜在乘法因子而异。
例3提供一个旨在识别一个数字的乘法因子的集合的实施例,并包括对达到并包括要被因数分解的该数字的乘法因子的考虑。也可能有可替换的实施例。
在另一个实施例中,认识到一个数字总是其自己的因子、1是每个数字的一个因子并且一个数字的其它乘法因子没有超过该数字的值的一半的。例如,对于数字12来说,除了12以外的最大因数是6。因此,通过考虑按照以2开始并以要被因数分解的数字的半数为结束的数字编程的器件,可以使对数字的因子的确定更加高效。在奇数的情况下,进一步可以认识到,最大的因子不能超过要被因数分解的数字的三分之一。因此可以减少需要被考虑的器件的数量,以便提高因数分解方法的效率。
因数分解成素数的方法前面的例子和内容描述的因数分解的方法的用途,包括确定一个数字是否是另一个数字的乘法因子,以及确定一个数字的乘法因子的全集或其子集。本发明包括相关的方法,其中,可以考虑仅按素数编程的器件。从数论中可知,任何数都可以由仅为素数的一个乘积代表。因此,仅仅把素数看作潜在乘法因子,提供一个把一个数字因数分解成其素数的方法。用本因数分解成素数的方法,有可能确定哪些素数是一个数字的因子,以及把一个数字完全因数分解成仅包含素数的一个乘积。
如上文所述,通过使用一个器件并按照不同的潜在乘法因子改变其编程策略,或者通过使用每一个都是按照一个不同的潜在乘法因子编程的多个器件,或者通过使用上述的某种组合,可以检测多个潜在乘法因子的每一个。在因数分解成素数的方法中,只包括按照素数编程的器件。除了素数的限制外,因数分解成素数的方法的实现可类似地遵循上述的因数分解方法。由于数字1是每个数字的因子,即使1可以被看作一个素数,也不需要特别地考虑它。
例4在这个例子中,使用多个器件来确定数字21的素数因子,其中每个器件包含一个按照不同的素数编程的相变材料。在这个例子中,考察不超过要被因数分解的数字的一半的素数。因此,在本例中考察按照数字2、3、5和7编程的器件。下一个素数11大于21的一半,因此它和更大的素数都不是21的因子。
为了实现21的素数因数分解,按照数字2、3、5和7编程的器件被递增21次,并在递增期间按需要被重置。在递增完成时处于它们的置位状态的那些器件对应于21的素数因子。本例中的递增的执行揭示,在递增完成时按照数字3和7编程的器件处于它们的置位状态,而按照数字2和5编程的器件不处于它们的置位状态。因此得出结论,3和7是21的素数因子。
如果按照例4的实施例分析一个素数本身,则在递增结束时没有器件处于它们的置位状态。这样一个结局导致得出原始数字是个素数的结论,或者该数只有其自己和1是因子的等同结论。如果13是需要被因数分解的数字,并且采用例4中所述的过程,则按照2、3、和5编程的器件被递增13次,在递增结束时这些器件都不处于其置位状态。如果该方法中使用了按照达到素数13编程的器件,则也将得出13只有其自己和1是因子的结果。
如上文所述,通过计算按照素数因子编程的器件或相变材料的体积在递增期间被置位的次数,可以确定每个素数因子的辅助因子。每个素数因子和其辅助因子的乘积等于需要因数分解的原始数。即使在使用按照素数编程的器件时,辅助因子也可能不是素数。因此,要实现把一个数字变成一个只有素数的乘积的完全因数分解,需要进一步的考虑。
这些进一步的考虑,在上述的例4中是不必要的,因为每个被确定的21的素数因子(3和7)有一个也是素数的辅助因子(分别是7和3)。例4中所述的方法可以被用来确定一个数的特定素数是否是乘法因子,但是不可以提供一个数字至其素数因子的完全因数分解,其中,完全因数分解指的是确定其乘积等于被因数分解的数字的素数的唯一性集合。在例4中,确实发生了完全因数分解,因为所确定的素数因子(3乘以7)等于被因数分解的数(21)。
对诸如18的数字的至素数的完全因数分解,说明需要包括在例4中所指出的以外的考虑。使用按照例4的架构中素数编程的器件对18进行因数分解,需要包括按照素数2、3、5和7编程的器件或相变材料的体积。在按照数字18的器件的每个的递增完成时,发现只有2和3是18的素数因子。由于2*3不等于18,这种情况下的结果不构成18至其素数的完全因数分解。(为了方便,这里将用*代表算术乘法运算。例如,2和3的积,可以表达为2*3,其中2*3表示2乘以3)。而当然的结论是,只有2和3是18的素数因子,但是因子2和3的一个或两个必须多于一次地出现在18的完全素数因数分解中。因此,一个数的完全素数因数分解,包括确定所有的素数因子以及每个素数因子在等于被素数因数分解的数字的素数乘积中出现的次数。
完全素数因数分解需要进一步考察在按照素数的初始因数分解后获得的辅助因子。就18而言,素数因子2和3被确定并且分别有辅助因子9和6。如上文所述,可以通过计算按照所确定的素数因子编程的器件发生的置位转换的次数,确定辅助因子。由于辅助因子不是素数,显然在对素数的初始考虑中尚未实现18的完全素数因数分解。需要为初步确定的素数因子所获得的辅助因子的素数因子进行二次确定。由于2*9和3*6二者都等于18,可以对辅助因子9或6的任何一个进行素数因子的二次确定。
对初始考虑已经确定了在被因数分解成素数的数字中存在的所有素数因子的了解,简化该二次确定。因此,可以用按照已经被确定的素数因子编程的器件对辅助因子进行因数分解。就18而言,可以选择辅助因子9或辅助因子6作进一步的考察,这个进一步考察只需要包括按照所确定的素数因子2和3编程的器件。如果辅助因子9被选择并如上文所述地用按照2和3编程的器件测试,发现2不是素数因子,而3是个以3的辅助因子的素数因子。由于辅助因子3是个素数,18的素数因数分解是完全的,结果是18=2*3*3。在这个结果中,2是在素数因子的初始确定中确定的一个素数因子,3是在素数因子的二次确定中确定的一个素数因子,并且3是在素数因子的二次确定中确定的一个辅助因子。因此看到素数3在18的素数因数分解中出现两次。
可以连续执行若干次对辅助因子的素数因子的确定,以实现对任何输入数的完全素数因数分解。素数因数分解可被看作是一个对连续的更小的数字的素数因子的阶联确定。在因数分解的初始考察中或初始层次中,确定一个输入数的素数因子,在初始考察中所确定的素数因子中的一个的辅助因子,备用在下一次考察中,如此等等,一直到找出是素数的辅助因子。每个层次的考察因此要分析一个比在阶联安排中的前一层的考察中的更小的数。每一层次的确定都可以用在先确定中所找出的任何辅助因子完成。在发现辅助因子是素数的层次,已经实现了完全素数因数分解。就数字18而言,要进行两个层次的考察。在第一层考察中,数字2和3被确定为素数因子,在第二层考察中,进一步考察辅助因子9,发现其包括素数因子3和辅助因子3。由于辅助因子3是个素数,数字18只需要两层考察。更复杂的情形可以类似地分析。
一个可选择的完全素数因数分解的方法是,比较在一层考察后获得素数因子的乘积与输入数,看它们是否相等。例如,共同待审定的美国专利申请(序列号10/144319),描述了使用相变材料的乘法方法。如果在一层考察后获得素数因子的乘积等于输入数,则已经实现了完全素数因数分解。如果不是,则需要进一步考察。进一步的考察可包括如上所述地对素数因子的另一层考察或者可包括把输入数除以在初始层次的考察后获得素数因子的乘积。使用相变材料的除法方法,例如在共同待审定的美国母案申请(序列号10/144319)中公开。如果除法的结果是一个素数,则已经实现了素数因数分解。如果不是,则通过因数分解或除法进一步考察该除法结果,一直到实现了素数因数分解。这个选择性方法也可以用于一般的把数字分解成包括非素数的数字的因数分解。
为了说明前述内容,可以考察数字18的素数因数分解的例子。如上文所述的那样,在一层因数分解后,2和3被确定为18的素数因子。2与3相乘得出6。由于6不等于18,需要进一步的考察才能完成素数因数分解。按照前述的除法方法,将原始数字18除以6,得到3。除法的结果因此是,3是18的另一个因子。由于3是素数,除法方法的一个实现以18可以被素数因数分解成2*3*3的结果完成素数因数分解。
在这里所公开的因数分解方法和素数因数分解方法中,常常需要确定一个因子或素数因子的辅助因子。如上文所指出的那样,因子的辅助因子可以通过计算按照因子编程的相变材料的体积在按照输入数递增期间被置位的次数来确定。置位转换的计数,可以用一个外部计数器完成,或者通过相变材料每次置位时将一个计数寄存器递增1而完成。在共同待审定的美国母案申请(序列号10/144319)中描述了包含相变材料的计数寄存器。计数寄存器可以具有与被发明方法用作计算媒介的相变材料的体积相同或不同数量的编程状态。在有些数字的因数分解中,辅助因子可能是个大数字并可能超过计数寄存器可用的编程状态的个数。解决这种辅助因子的问题的一种方式是使用多个计数寄存器,这几个寄存器的每个都可以被用来存储一个多位辅助因子的一位。在共同待审定的美国母案申请(序列号10/144319)中已经描述了多位数字的存储。
模运算的方法在诸如上文所述例2的例子中,当判定潜在乘法因子不是一个因子时,因数分解方法的结果仍然是有解释性用途的。大家知道的数学分支—模运算,包括考察在一个数除以另一个数后产生的余数。如上文所述,当余数是零时,因数分解完成。非零的余数不指示因数分解,但是在模运算计算很重要。模运算在许多数学课本中有描述,为了提供背景信息和所公开的模运算方法的上下文,下文对模运算做部分说明。
余数是模运算中的一个关键的量。这里所使用的余数,指的是当一个数除以另一个数时残留的数字。例如,当19除以7时,得到余数5。例如,当34除以9时,得到余数7。来自被称作除法算法(divisionalgorithm)的数论的一般结果,在每当一个整数除以另一个整数时提供一个余数。按照除法算法,任意整数a(被除数)都可以按a=q*b+r以整数b(除数)表达,其中q是整数(商),r是一个非负整数,具有一个小于除数b的量的值。按照数论,q和r的值对于给定的被除数和除数来说是唯一的。
在模运算中,整数是由它们关于算术体系的模数的余数表示的。模数类似于除法上下文中的除数。例如,关于除以7的除法的余数,可以被用来定义一个具有等于7的模数的算术体系。这样一个算术体系也可被称作以7为模的体系(modulo 7 system)。在以7为模的体系中,整数由它们关于除以7的除法的余数表示。在前述的19除以7的例子中,确定余数是5。因此,在以7为模的体系中,数字19由其余数5表示。这个结果也可以以恒等关系的形式表示19 5 mod 7,其中数学符号表示恒等关系。类似的考虑适用于具有任何模数的算术体系,可以写成形为a r mod m的通用恒等关系,其中m是模数,a是个整数,r是a除以m时得出的余数。余数r也可被称作在以m为模的体系中整数a的同余(congruence)。余数r也可被看作是被除数a除以除数m时得出的余数。
在以m为模的体系中,余数r有一个范围在0到m-1的整数值,所有的整数a都必须有r的被允许值的其中之一。例如在以5为模的体系中,r可以是0、1、2、3、或4,所有整数值a具有从0、1、2、3、或4中选择的余数r。在以5为模的体系中,恒等关系的例子包括19 4 mod 5、22 2 mod 5、46 1 mod 5等等。余数r的一个给定值,必然与整数a的若干个值相关联。因此,例如19 4 mod 5、54 4mod 5、799 4 mod 5等等。在以m为模的算术体系中,具有相同的余数b的整数可被称作属于相同的等价类(equivalence class)或剩余类。例如,19、54和799,在以5为模的体系中是属于相同的等价类的。一个完全的等价类包括在特定的模体系中具有相同余数的所有整数。在以m为模的体系中,不同的等价类的个数是m。例如,以3为模的体系具有由三个可能的余数0、1、和2定义的3个等价类。
余数r的确定,是模运算中的基本计算之一。如上文所述的例2中例示的那样,可以用多态计算媒介提供余数。如上文所述,在本发明方法的上下文中,相变材料是优选的多态计算媒介。如果在上文所述的因数分解方法之一的实现期间递增结束时,相变材料不是处于其置位状态,则知道按照其相变材料被编程的数,不是原始输入数的一个因子。通过读取相变材料,以确定在递增完成时相变材料处于哪个编程状态,可以确定余数。在以下的例5中提供一个确定模运算系统中输入数的同余的方法的示例性例子。
例5在这个例子中,确定以6为模的体系中16的同余。这个计算也可以被称作同余计算(congruence computation)。在这个同余计算中,寻求恒等关系16 r mod 6中的数量r。为了完成同余确定,按照模数6编程一个相变材料。如上文所述,编程是通过一个策略完成的,在该策略中,定义编程状态,使得把相变材料从其重置状态转换到其置位状态需要6次递增。可以将重置状态与零递增相关联,可以沿高阻平台定义具有六个递增的置位状态和额外的状态,它们对应于1、2、3、4、和5个递增。状态之间的能量分隔可以是均匀的或者是非均匀的。如此编程的相变材料可被称作以6为模的相变材料。
为了模运算的目的,可以把整数值与编程状态相关联,以方便对相变材料的状态的解释。可以将重置状态与值0相关联,可以将对应于一个递增的编程状态与值1相关联,如此等等。由于以6为模的体系规定5或更小的余数,置位状态(本例中是对应于6个递增的编程状态)被适当地与值0相关联。(要是把置位状态与6相关联,则相变材料处于置位状态的意义可被解释为6 mod 6。由于零是与6 mod 6同余的,把值0与置位状态相关联不产生冲突。这个关联也与如上文所述的那样把置位状态用作因数分解的标准一致。
相变材料按照所需的模数被编程后,相变材料可以被用来确定被编程的模数内的任何同余关系。在这个例子中,要确定以6为模的体系中16的同余。该确定通过按照要为其寻找同余关系的数递增相变材料而进行。在这个例子中,向相变材料提供16次递增,相变材料在每次被转换到其置位状态时被重置。必要的话,在递增之前把相变材料转换到其重置状态。如上文所述,可以在递增期间测量相变材料的电阻,以估定相变材料何时被转换到其置位状态。在这个例子中,施加六个能量递增就把相变材料从其重置状态转换到其置位状态,此时,相变材料被重置,然后再进一步递增。在这个例子中,施加7到12的递增就第二次把相变材料从其重置状态转换到其置位状态。相变材料再一次被重置,向相变材料提供所要求的16个递增中的最后4个。递增13把相变材料转换到与值1相关联的编程状态,递增14把相变材料转换到与值2相关联的编程状态,递增15把相变材料转换到与值3相关联的编程状态,递增16把相变材料转换到与值4相关联的编程状态。因此,在所要求的16次递增完成后,相变材料处于与值4相关联的编程状态。这个最后的编程状态提供所需的余数或同余,所得出的结论是,本例中所寻求的同余关系是16 4 mod 6如例5中的同余关系的计算需要确定在递增完成时相变材料所处于的编程状态。这个最后的编程状态,可以通过读取相变材料而被确定。如果相变材料在递增结束时处于其编程状态,通过测量电阻可以完成读取。在这种情况下,余数是0,通过让r等于0完成同余关系。这个情况对应于模数m是a的一个乘法因子的情形。
当模数m不是a的乘法因子时,相变材料在递增结束时处于除其置位状态以外的一个最后编程状态。这个最后编程状态可以通过读取相变材料而确定。读取已经在共同待审定的美国母案申请(序列号10/144319)中描述过,需要相变材料从在同余计算的实现期间获得的最后编程状态的递增。可以通过以下方式确定最后编程状态1.一直递增到相变材料置位;2.计算所需的递增个数;和3.从计算的模数中减去所需的递增个数。例如在上文所述的例5中,需要两个递增才能把相变材料从其最后编程状态转换到其置位状态。从模数6中减去2得到4。因此可以得出结论,最后编程状态是与数字4相关联的编程状态,4是在例5的同余计算中所寻求的余数。在共同待审定的美国母案申请(序列号10/144319)中描述的一个实施例中,在步骤2中包含的计数,可通过为向相变材料的最后编程状态提供的能量的每个递增递增一次计数寄存器而获得。在这个实施例中,假设计数寄存器具有与同余计算中使用的相变材料相同数量的编程状态,由步骤3的减法所表示的差,对应于置位计数寄存器所需的递增的数量。在一个优选实施例中,计数寄存器由按照在同余计算中所用的模数编程的相变材料组成。
如上文所指出的那样,关于模数m的同余计算,把所有整数的集合分成具有一个共同的关于除以m的余数的同余类或残数。例如在以5为模的体系中,存在对应于余数0、1、2、3和4的剩余类,每一个整数被包含在并且仅被包含在这些剩余类的一个中。例如,剩余类2包括作为成员的2、7、12、17...;剩余类3包括作为成员的3、8、13、18...等等。本发明的确定模运算系统中一个输入数的同余的方法对若干个输入数的每个的应用,可被用来把一个数集分类成各个剩余类。
也可以用按照本发明的相变材料完成模运算系统中的加法。模运算系统对于加法来说是封闭的,使得模运算系统中一个元素向模运算系统中另一个元素的相加,必然产生一个也是模运算系统中一个成员的结果。举例来说,我们可以考察以上提到的以5为模的体系。以5为模的体系有数字0、1、2、3和4作为成员。如上文所述,这些数字可以被看作在以5为模的算术体系中存在的可能的余数或剩余类。模运算中的加法,以与普通十进制加法类似的方式完成,所不同的是结果被限于是模运算系统中的一个成员。以5为模的体系中的1加上以5为模的体系中的2等于以5为模的体系中的3。这个加法可被表达为1 mod 5+2 mod 5=3 mod 5.。
当一个模运算系统的两个成员的和等于或超过该模运算系统的模数时,需要特殊的考虑。例如在以5为模的体系中,3和4的相加需要适当的处理,因为在普通十进制算术中的预期结果是7,超过该该模运算系统的模数5。可以通过把预期的十进制结果转换成其以5为模的相等物而适当处理这些情况。因此,3 mod 5+4 mod 5=7 mod5=2 mod 5。结果2是以5为模的体系的一个成员,因此是个适当的结果。在一个模运算系统的框架中一般的十进制数的相加,可以通过把十进制数转换成它们模数等价物并相加而类似地完成。例如,我们可以在以5为模的体系中如下地把19和17相加19 mod 5+37 mod5=4 mod 5+2 mod 5=6 mod 5=1 mod 5。该计算也可以通过首先把十进制数相加、然后把结果转换成模数5的等价物而完成19 mod5+37 mod 5=56 mod 5=1 mod 5。
在一个模运算系统的加法,在本发明中可以容易地通过以下方式实现按照运算系统的模数编程一个相变材料,重置相变材料,按照被总计的数递增相变材料。在前述的例子中,例如在以5为模的体系中把19和37相加,我们可以在开始时按照模数5编程一个相变材料。如上文所述,这个编程包括定义编程状态,使得把相变材料从其重置状态转换到其置位状态需要5个递增。因此,总共定义6个编程状态,其中包括重置状态、置位状态和4个中间状态。相变材料被重置,然后通过按照两个被加数的每个进行递增并如上文所述的每次在相变材料被转换到其置位状态时进行必要的重置而完成相加。在这个例子中,相变材料首先被递增19次,以提供相变材料编程状态5(对应于数字4的编程状态),然后被进一步递增37次,以提供最后状态,其中,相变材料处于编程状态2(对应于数字1的编程状态)。
在模运算系统中的加法也可从剩余类的角度来看待,因为在模运算中最终决定两个数的和的是余数。在上文所述的例子中,我们发现1 mod 5+2 mod 5=3 mod 5。这个结果也可以从剩余类的角度解释如下在以5为模的系统中,剩余类1中的任何数与剩余类2中的任何数之和,必然生成剩余类3中的一个数。例如,16属于剩余类1,32属于剩余类2,16+32=48属于剩余类3。对于其它剩余类和其它模运算系统,可以对加法作类似的解释。
这里公开的内容是示例性的,并非要限制本发明的实践。因此众多的等同物和微小的变化被认为是在本发明的范围内。定义本发明范围的,是与前面的内容结合的随后的各权利要求,包括所有的等同物。
权利要求
1.一种因数分解一个输入数的方法,包含以下步骤提供一定体积的数字多态相变材料,所述相变材料有多个状态,所述状态包括一个重置状态、一个通过以对应于所述重置状态的置位能量的量施加能量而从所述重置状态可得到的置位状态,所述置位状态比所述重置状态有更低的阻抗,和一个或多个具有与所述重置状态实质上相同的电阻的中间状态,所述一个或多个中间状态是通过以小于所述重置状态的所述置位能量的量施加能量而从所述重置状态可得到的;提供所述输入数的一个潜在乘法因子;按照所述潜在乘法因子编程所述相变材料,所述编程包括定义编程状态,所述编程状态是从所述相变材料的所述多个状态中选择的,所述编程状态包括所述重置状态和所述置位状态,所述编程状态的个数比所述潜在乘法因子多1;把所述相变材料变换到所述重置状态;A.递增所述相变材料,所述递增包括提供足够的能量,以便把所述相变材料转换到所述编程状态的一个不同的编程状态;B.反复地重复所述递增步骤A,直到所述相变材料被转换到所述置位状态;C.重置所述相变材料;反复地重复以上步骤A、B和C,直到所述相变材料已经被递增的次数等于所述输入数。
2.权利要求1的方法,其中,所述递增步骤A进一步包括测量所述相变材料的阻抗。
3.权利要求2的方法,其中,所述测量是在所述相变材料已经被转换到转换到所述编程状态的所述一个不同的编程状态后完成的。
4.权利要求1的方法,进一步包含判断所述潜在乘法因子是否是个乘法因子的步骤,所述判断步骤包括在所述相变材料已经被递增的次数等于所述输入数后测量所述相变材料的阻抗。
5.权利要求1的方法,进一步包含计算所述相变材料被转换到所述置位状态的次数的步骤。
6.权利要求1的方法,其中,所述相变材料包含从由In、Ag、Te、Se、Ge、Sb、Bi、Pb、Sn、As、S、P及其混合物或合金组成的组中选择的一个或多个成分。
7.权利要求1的方法,其中,所述相变材料包含一个氧属元素。
8.权利要求7的方法,其中,所述氧属元素是Te和Se的混合物。
9.权利要求7的方法,其中,所述相变材料进一步包含Ge。
10.权利要求7的方法,其中,所述相变材料进一步包含Sb。
11.权利要求7的方法,其中,所述相变材料进一步包含一个过渡金属元素。
12.权利要求11的方法,其中,所述过渡金属是从由Cr、Fe、Ni、Nb、Pd和Pt组成的组中选择的。
13.权利要求1的方法,其中,所述编程状态按均匀的能量间隔分隔。
14.权利要求1的方法,其中,所述递增步骤A通过提供电能形式的能量而完成。
15.权利要求14的方法,其中,所述电能包括一个电流或电压脉冲。
16.权利要求1的方法,其中,所述递增步骤A通过提供光能形式的能量而完成。
17.权利要求1的方法,其中,所述递增步骤A通过提供热能形式的能量而完成。
18.一种对输入数的因数分解的方法,包含以下步骤提供多个体积的数字多态相变材料,所述多个体积的相变材料的每个有多个状态,所述状态包括重置状态;可通过以对应于所述重置状态的置位能量的量施加能量而从所述重置状态得到的置位状态,所述置位状态具有比所述重置状态低的阻抗;一个或多个具有与所述重置状态的实质上相同的电阻的中间状态,所述一个或多个中间状态可通过以小于所述重置状态的置位能量的量施加能量而从所述重置状态得到;提供所述输入数的多个潜在乘法因子;向所述体积的相变材料应用权利要求1的方法,其中,所述体积的相变材料的每个按照所述潜在乘法因子的不同的一个被编程。
19.权利要求18的方法,其中,所述多个潜在乘法因子的每个都是素数。
20.权利要求19的方法,进一步包含确定所述素数的哪个是所述输入数的一个乘法因子的步骤,所述确定步骤包括测量按照所述素数编程的所述体积的相变材料的阻抗。
21.权利要求20的方法,进一步包含计算被确定为所述输入数的一个乘法因子的素数的辅助因子的步骤,所述计算步骤包括在所述应用权利要求1的方法的步骤期间按照所述素数乘法因子编程的所述体积的相变材料被置位的次数。
22.权利要求21的方法,进一步包含按照权利要求18的方法因数分解所述辅助因子的步骤。
23.权利要求21的方法,进一步包含按照权利要求19的方法因数分解所述辅助因子的步骤。
24.一种确定一个模运算系统中的一个输入数的同余的方法,包含以下步骤提供一个体积的数字多态相变材料,所述相变材料有多个状态,所述状态包括重置状态;可通过以对应于所述重置状态的置位能量的量施加能量而从所述重置状态得到的置位状态,所述置位状态具有比所述重置状态低的阻抗;和一个或多个具有与所述重置状态的实质上相同的电阻的中间状态,所述一个或多个中间状态可通过以小于所述重置状态的置位能量的量施加能量而从所述重置状态得到;提供所述模运算系统的模数;按照所述模数编程所述相变材料,所述编程包括定义编程状态,所述编程状态是从所述相变材料的所述多个状态中选择的,所述编程状态包括重置状态和所述置位状态,所述编程状态的个数比所述模数大1;把所述相变材料转换到所述重置状态;A.递增所述相变材料,所述递增包括提供足以把所述相变材料转换到所述编程状态的一个不同的编程状态的能量;B.循环地重复所述递增步骤A,直到所述相变材料被转换到所述置位状态;C.重置所述相变材料循环地重复以上步骤A、B和C,直到所述相变材料已经被递增的次数等于所述输入数;读取所述相变材料,所述读取包括以下步骤计算把所述相变材料转换到所述置位状态所需的递增的次数;从所述模数中减去所述递增次数。
25.一种在一个模运算系统中求一个第一数和一个第二数的和的方法,包含以下步骤提供一个体积的数字多态相变材料,所述相变材料有多个状态,所述状态包括重置状态;可通过以对应于所述重置状态的置位能量的量施加能量而从所述重置状态得到的置位状态,所述置位状态具有比所述重置状态低的阻抗;和一个或多个具有与所述重置状态的实质上相同的电阻的中间状态,所述一个或多个中间状态可通过以小于所述重置状态的置位能量的量施加能量而从所述重置状态得到;提供所述第一数和所述第二数;提供所述模运算系统的模数;按照所述模数编程所述相变材料,所述编程包括定义编程状态,所述编程状态是从所述相变材料的所述多个状态中选择的,所述编程状态包括重置状态和所述置位状态,所述编程状态的个数比所述模数大1;把所述相变材料转换到所述重置状态;A.递增所述相变材料,所述递增包括提供足以把所述相变材料转换到所述编程状态的一个不同的编程状态的能量;B.循环地重复所述递增步骤A,直到所述相变材料被转换到所述置位状态;C.重置所述相变材料;循环地重复以上步骤A、B和C,直到所述相变材料已经被递增的次数等于所述第一数;D.递增所述相变材料,所述递增包括提供足以把所述相变材料转换到所述编程状态的一个不同的编程状态的能量;E.循环地重复所述递增步骤D,直到所述相变材料被转换到所述置位状态;F.重置所述相变材料;循环地重复以上步骤D、E和F,直到所述相变材料已经被递增的次数等于所述第二数。
26.权利要求25的方法,进一步包含以下步骤读取所述相变材料,所述读取包括以下步骤计算把所述相变材料转换到所述置位状态所需的递增的次数;从所述模数中减去所述递增次数。
全文摘要
在非二进制计算方案中的一种因数分解数字的方法,更具体来说,一种使用数字多态相变材料因数分解数字的方法。该方法包括以表征要被因数分解的数字的数量向按照该数字的一个潜在因子编程的相变材料施加能量。编程策略规定当每次要被因数分解的数字中出现一个潜在因子的倍数时置位相变材料一次。通过在执行该方法后计算倍数的个数并评估相变材料的状态,可以判定一个潜在因子是否确实是一个因子。可以为不同的因子再编程给定量的相变材料,或者可以为不同的因子采用分隔的体积的相变材料。通过组合按照不同的因子编程的分隔的体积的相变材料,可以实现对几个潜在因子的并行的因数分解。也包括在模运算系统中的加法和计算同余的方法。
文档编号G11C11/56GK1672125SQ03817623
公开日2005年9月21日 申请日期2003年5月14日 优先权日2002年5月24日
发明者S·R·奥夫辛斯基, B·帕斯马科夫 申请人:能源变换设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1