所以我试图使用acm.utils包中的RandomGenerator类创建一个从0到n(从用户输入)的随机素数的方法,由于某种原因它不起作用!我经历了很多次,我觉得这个解决方案是正确的,它最终给出了没有错的数字!
这是针对uni的项目,我只能使用acm.util!没有扫描仪!只有这种代码
v <- NULL
ndays <- length(v_day[[5]]$articles_over_time$buckets)
for (i in 1:ndays) {
v1 <- do.call("rbind", lapply(v_day[[5]]$articles_over_time$buckets[[i]]$group_by_state$buckets, data.frame))
th_dt <- as.POSIXct(v_day[[5]]$articles_over_time$buckets[[i]]$key / 1000, origin="1970-01-01")
v1$view_date <- th_dt
v <- rbind(v, v1)
msg <- sprintf("Read views for %s. Found %d \n", th_dt, sum(v1$doc_count))
cat(msg)
}
v
答案 0 :(得分:1)
=
用于分配,==
用于比较。
你需要改变你的状况
while ((i < num-1)&&(prime=false)){
到
while ((i < num-1)&&(prime==false)){ or
while ((i < num-1)&&(!prime)){
答案 1 :(得分:1)
这是确定数字是否为素数的基本方法。这种方法实际上只是为了理解查找数字是否为素数的逻辑。享受。
public boolean isPrime()
{
boolean prime = true;
for (int s = 2; s < original; s++)
if (original % s != 0 )
{
prime = true;
}
else
{
prime = false;
return prime;
}
return prime;
答案 2 :(得分:0)
您的代码非常奇怪。像c这样的变量不是很清楚,名称也没有帮助。
您可以阅读其他实现。
我做了一些改变让它发挥作用。跟踪也有帮助!
public static int nextPrime(int n)
{
int num = (int)(1+Math.random()*n); // other generator
// TRACE HERE
System.out.println("START:"+num);
boolean prime=false;
// CHANGE HERE
if (num==2)
{
return (num);
}
else
{
int i = 2;
int c = 0;
// CHANGE HERE
while ((i < num-1)&&(prime==false))
{
// Not prime => next one
if( (num % i) == 0)
{
// TRACE HERE
System.out.println("YOU LOSE: :"+num+" divided by "+i);
c=c+1;
}
if((c==0)&&(i==(num-1)))
{
prime=true;
// TRACE HERE
System.out.println("BINGO:"+num);
// CHANGE HERE
break;
}
if(c>=1)
{
// SAME PLAYER LOOP AGAIN
num = (int)(1+Math.random()*n);
// TRACE HERE
System.out.println("RESTART:"+num);
i=1;
// CHANGE HERE
c=0;
}
i=i+1;
}
}
return (num);
}
答案 3 :(得分:0)
要么您错误地解决了问题,要么您还没有接近正确编码问题。最多10个有4个素数:{2,3,5,7}。如果用户输入10,你应该从这个集合中给出一个随机素数,还是前10个素数中随机的素数{2,3,5,7,11,13,17,19,23,29}?你说这个问题是第一个解释(其中11个不是对10的有效回答),但你实现了第二个解释的尝试(其中11个是对10的有效响应)。
有一种简单的方法可以在[1,1000000]范围内的素数内均匀生成素数。选择范围内的随机整数并测试它是否为素数。如果是这样,请将其退回。如果没有,请重复。这称为拒绝抽样。在没有拒绝采样的情况下获得均匀随机素数是非常复杂的,因为在大范围内计算或列出素数并不容易。测试一个数是否是素数是相对容易的,并且对于n> 1,它平均需要大约log n个样本才能在[1,n]中找到素数。