java 随机生成 两个数 n1 n2

java 随机生成 两个数 n1 n2

要求: n1,n2 均要 小于 指定 数值 ,比如小于1000
n1 要能整除 n2
最好不用循环。。。。

                    大概一次要生成 1万条数据,越高效率越好,
                    越能装13越好

使用java中的random Random rd =new Random(); int n1=rd.nextInt(1000); (表示从0-999) int n2=rd.nextInt(999);

估计要用循环啊!一次不成功,接着随机,知道成功存起来,然后生成一万条

带范围的Random函数肯定要用,这个时候不用循环,r1可定要比第二个数要先生成。

不用循环的话,比较麻烦

while(true){
//整除
if(n1%n2==0&&n1 //保存到集合
if(集合条数>=1万条)

break;

}
}

public class Test {
public static void main(String[] args) {
Test test = new Test();
long start = System.currentTimeMillis();
test.getSomeNums(10000, 1000);
System.out.println("共" + (System.currentTimeMillis() - start) + "毫秒");
}

/**
 * 获取两个随机数,随机数均要小于某个指定数,产生指定数量的数据。
 * @param count 指定数据的数据
 * @param ceil 要小于的指定数
 */
private void getSomeNums(int count, int ceil) {
    for (int i1 = 0; i1 < count; i1++) {
        int n1 = Math.round((long) (Math.random() * ceil));
        int n2;
        if (n1 == 0) {
            n2 = Math.round((long) (Math.random() * (ceil - 1))) + 1;
            System.out.println("n1=" + n1 + ";n2=" + n2);
        } else {
            for (int i2 = n1 / 2; i2 > 0; i2--) {
                if (n1 % i2 == 0) {
                    n2 = i2;
                    if (n1 == 999) {
                        System.out.println("n1=" + n1 + ";n2=" + n2);
                    }
                    break;
                }
            }
        }

    }
}

}

 我自己试了一下,耗时在15-20毫秒之间,肯定还有更快的,希望其他小伙伴贡献出来。

我有个想法:

步1: 先算1000以内的质数,这个可以保存下来,以后就不用再重算。假设质数的总为为zhishunum,
所有算出的质数保存入一个 long[zhishunum]数组 zhishuArray
步2 : 随机一个数N1 .
步3 : 随机一个 小于等于 zhishunum 的随机数 selectzhishu。读出zhishuArray[selectzhishu] 对应的质数 ZS .
步4: N2 = N1/ZS .

这样最快,不用循环尝试,且 N1 % N2 ==0.

修正一下:

步4:
for (i=0 ; && zhishuArray[i] <= N1/2;i++){
N2 = N1/zhishuArray[i]
}

这样最快,循环尝试少,且 N1 % N2 ==0.
应该还可以更优化。

假如指定值是X;
while(true){
int n1 = math.random((X-1)/2);
n2 = x / n1 * n1;
system.out.println("n1=" + n1 + ",n2 = " + n2 );
}