如何快速查找数字的所有因子?
例如:
数字:20
因素:{1 * 20,2 * 10,4 * 5,5 * 4,10 * 2,20 * 1}
答案 0 :(得分:4)
这实际上是一个尚未找到好解决方案的问题。因此,RSA加密实际上取决于分解数字的计算难度。请参阅:Integer Factorization
但是,您可以通过查看n
的平方根之前的数字来加速已经给出的算法,并通过检查n % i == 0
来检查它们是否是因子。如果是这样,您可以通过n^(.5)
找到大于n / i
的相应因子。
答案 1 :(得分:3)
如果要查找因子的数字恰好是奇数,则只需要测试奇数,因为奇数不可能有偶数因子。因此,通过预先检查,您可以节省一些处理。
private static List<Integer> findFactors(int num)
{
int incrementer = 1;
if (num % 2 != 0)
{
incrementer = 2; //only test the odd ones
}
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= num / 2; i=i+incrementer)
{
if (num % i == 0)
{
list.add(i);
}
}
list.add(num);
return list;
}
答案 2 :(得分:2)
通过一个循环,将模数应用于所有中间数。
X=1;
WHILE(X<=20)
IF 20%x == 0
THEN FACTOR!
X++;
END
答案 3 :(得分:0)
您可能希望使用模数运算符(%)。
E.g
import java.util.Scanner;
public class Factor {
public static void main(String[] args) {
System.out.println("Enter a number whose factors are to be calculated: ");
Scanner scanNum = new Scanner(System.in);
int numFac = 0;
if(scanNum.hasNextInt()) {
numFac = scanNum.nextInt();
}
System.out.println("The Factors of the entered number are:-");
for(int i = 1; i <= numFac; i++) {
if(numFac%i == 0) {
System.out.print(i+" ");
}
}
}
}
答案 4 :(得分:0)
public static Integer[] findFactors(int d)
{
List<Integer> list = new ArrayList<Integer>();
for(int i = 1; i <= d/2; i++)
{
if(d % i == 0) list.add(new Integer(i));
}
list.add(new Integer(d));
return (Integer[]) list.toArray(new Integer[0]);
}
public static void main(String[] args)
{
Integer[] list = findFactors(20);
for(Integer i : list) System.out.println(i);
}
<强>输出:强>
1
2
4
5
10
20
答案 5 :(得分:0)
List<Integer> factors = new ArrayList<Integer>();
for (int i = 1; i < NUMBER; i++) {
if (NUMBER % i == 0) {
factors.add(i);
}
}
答案 6 :(得分:0)
public class FactorGenerator{
private int number;
private int i;
public FactorGenerator(int numberToFactor){
number = numberToFactor;
}
public int nextFactor(){
while(number % i == 0){
System.out.print((Math.round(i)) + " ");
number =((number / i));
return i;
}
return i;
}
public boolean hasMoreFactors(){
for ( i = 2; i <= number; i++){
nextFactor();
}
return false;
}
}
Test Program:
import java.util.Scanner;
public class FactorgeneratorTester{
public static void main (String [] args){
Scanner in= new Scanner(System.in);
System.out.println("input the value");
int number = in.nextInt();
FactorGenerator fg = new FactorGenerator(number);
if (fg.hasMoreFactors()){
System.out.println(fg.hasMoreFactors());
}
}
}
输入
210个
输出
2 3 5 7