由于某种原因,这个循环没有停止,没有其他它甚至没有打印第一行,我不知道如何解决它
for(int i = 0; prime <= sqrt(rest); ++i) {
printf("%d", i);
if (primes[i] == 1) {
prime = primes[i];
printf("%d", prime);
while (rest % prime == 0) {
rest = rest / prime;
rep++;
}
if (rep == 1) {
printf("%d", i);
print++;
} else if (rep > 1) {
printf("%d^%d", prime, rep);
print++;
}
if (rest != 1 && print != 0) {
printf(" x ");
} else if (print != 0) {
printf("\n");
}
rep = 0;
print = 0;
}else{
printf("WTF\n%d\n", i);
i++;
}
}
if (rest > 1) {
printf("%lld\n", rest);
} else{
printf("WTF\n");
break;
}
}
答案 0 :(得分:0)
你永远不会改变素数的值,这是因为你的条件被设置为停止,所以如果它永远不会改变,它将永远不会停止。在你的for循环开始时,也许你的意思是素数而不是我?
答案 1 :(得分:0)
您的代码包含无穷无尽的时间:
。package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
一旦休息达到0,这将永远为真,并且你继续将休息除以素数,但是package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
,所以它会一直持续下去。
同样适用于while (rest % prime == 0) {...}
,这是您指定的值 - 0/prime = 0
,每次都是prime = 1
,依此类推,永远。
答案 2 :(得分:0)
所以我犯的错误就是这样: prime = primes [i]; ,如果我使用 prime = i; 而是一切正常,我认为我之所以这样做,是因为我不习惯使用像你那样使用数量的列表。谢谢大家的帮助