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 );
}