我有一个程序可以找到给定数字的素数因子 . 该算法以下面描述的方式工作 .
1)当n可被2整除时,打印2并将n除以2 .
2)在步骤1之后,n必须是奇数 . 现在开始从i = 3到n的平方根的循环 . 当我除n时,打印i并将n除以i,将i递增2并继续 .
3)如果n是素数并且大于2,那么n将不会通过上述两步变为1 . 因此,如果它大于2,则打印n .
有没有办法让它更快?
你可以通过仅用素数而不是复合来划分它 . 如果它可以被复合体整除,那么你将会发现在除以复合的素因子时 . 例如,如果你已经确定一个数字可以被3整除(并且正确地减少它),那么就没有必要测试数字是否可以被9整除 .
另外,我不会提高测试值(在你的情况下是两个,到我的下一个素数),直到你确定你测试的值是不可被它整除的 .
例证:27 . 当您的测试值为3时,您的算法将27除以3得到9,然后立即将测试值增加到5.应该保留为3,直到您除以它的数字不再为止一个因素 .
1 回答
你可以通过仅用素数而不是复合来划分它 . 如果它可以被复合体整除,那么你将会发现在除以复合的素因子时 . 例如,如果你已经确定一个数字可以被3整除(并且正确地减少它),那么就没有必要测试数字是否可以被9整除 .
另外,我不会提高测试值(在你的情况下是两个,到我的下一个素数),直到你确定你测试的值是不可被它整除的 .
例证:27 . 当您的测试值为3时,您的算法将27除以3得到9,然后立即将测试值增加到5.应该保留为3,直到您除以它的数字不再为止一个因素 .