分解质因数的编程算法
本文讲述分解质因数的编程算法,程序使用FLASH AS3代码制作。在点击了按钮时,首先获取输入文本框中的数,分别存为uint和String 两种类型的变量备用。
然后检测一下,输入的数是否小于2,如果是,则后面的while循环不会执行,此时文本框中给予提示。如果确是不小于2的数,再检查下是否首位不为0,如果为0文本框中也给予提示,不执行后面的循环。如果确是符合上面的两个条件,则可以开始运算,在算之前先得到系统时间,算完后再得到系统时间,两者之差即为所耗用的毫秒数。
在while循环中,执行条件为选用的质数小于等于要分解的数,如果能整除,则把该质数加入字符串,并算出商,让它成为下一次要分解的数。不能整除的话,则让n++换一个更大一点的质数来试,直到最后被除数与除数相同为止。
为了进行质数与合数的判断,加入了一个变量count。如果只能整除一次(即count为1时),可以判断输入的是一个质数,反之为合数,输出其分解质因数的结果。
out_txt.text=”请在上方文本框中输入整数进行分解!”;
input_txt.restrict=”0-9″;//限制仅输入数字;
input_txt.maxChars=9;//限制最多输入8个字符,再多一位数易使循环执行时间超过15s
_btn.addEventListener(MouseEvent.CLICK,onClick);
function onClick(e:MouseEvent):void {
var num:uint=uint(input_txt.text);//以数字形式存储所输入的数
var str:String=String(num);//以字符串形式存储所输入的数
var n:uint=2;//第一个尝试的质数
var flag:int=1;//用于去掉第一个质因数前的X号
var count:int=0;//用于判断是否为质数
if (num<2) {
out_txt.text=”请输入大于1的整数!”;
} else {
var oldTime:Number=getTimer();
if (input_txt.text.substr(0,1)!=”0″) {//首位字符不为0
while (n<=num) {
if (num%n==0) {
if (flag) {
str+=”=”+n;//要用+= ,不然用=会覆盖原数
flag=0;
} else {
str=str+”×”+n;
}
num=num/n;
count++;
} else {
n++;
}
}
out_txt.text=str;
if (count==1) {
out_txt.text=”这是一个质数,不能分解”;
}
var newTime:Number=getTimer();
time_txt.text=”用时”+(newTime-oldTime).toString()+”毫秒”;
} else {
out_txt.text=”首位不能为0″;
}
}
}
没有评论 ▼