//列出101到200以内所有的质数,程序没问题.编译通过.读起来比较朗朗上口.就是错了错了!
public class Zhi{
public static void main(String[] args){
int i = 101;
while(i<=200){
for(int j = 2; j<i; j++ ){
if(i%j==0){
continue;
}
else{
System.out.println(i);
}
}
i = i+2;
}
}
}
/**
从101开始到200内i递增2因为偶数都不是质数
使用while循环
j是从2到i循环
i % j=0
则continue跳过
否则显示结果
*/
public class Zhi{
public static void main(String[] args){
int i = 101;
while(i<=200){
for(int j = 2; j<i; j++ ){
if(i%j==0){
continue;
}
else{
System.out.println(i);
}
}
i = i+2;
}
}
}
/**
从101开始到200内i递增2因为偶数都不是质数
使用while循环
j是从2到i循环
i % j=0
则continue跳过
否则显示结果
*/
另判断质数只要区间[2,n/2]就行了 int i = 101; while (i <= 200) {
int temp = i;
for (int j = 2; j < i/2; j++) {
if (i % j == 0) {
i = i + 2;
break;
}
}
if (i == temp) {
System.out.println(i);
i = i + 2;
}
}
偶数不是质数,可是奇数又不全是质数!!!
结构有问题。
我觉得可以这样写:
boolean flag = true;
while(i<200) {
flag = true;
for(int j = 2; j < i; j++) {
if(i % j == 0) {
flag = false;
break;
}
}
if(flag) {
System.out.println(i);
}
}
{
outer:for (int i = 101; i<200; i+=2)
{
int k=Math.round((float)Math.sqrt(i));
for (int j= 2; j<=k; j++)
{
if(i%j==0) continue outer;
}
System.out.print(" "+i);
}
System.out.println();
}
http://www.java2000.net/viewthread.jsp?tid=121
“j是从2到i循环 ”是不需要的,应该是“j是从2到【i的根号2】的循环”然后,稍微debug一下就知道,你if(i%j==0){continue;} 就继续否则就打印,逻辑显然有问题。
也不判断一下是否j从2到i,i是否可以被每个j整除。事实上,有一个j可以整除i,这个i就不是素数了。所以俺改一下程序如下:import java.util.Calendar;public class Test {
public static void main(String[] args) { int i = 101;
while (i <= 200) {
int sqrtI = (int) Math.sqrt(i);
boolean flg = true;
for (int j = 2; j <= sqrtI; j++) {
if (i % j == 0){
flg = false;
break;
}
}
if(flg)
System.out.println(i);
i = i + 2;
}
}
}
区间[2,n/2]显然太大了,完全没有必要。【2,sqrt(n)】就足够了。
试想,判断101是否素数,从2到10,只要判断5次是否整除,[12,50]完全是在浪费时间,而且浪费了4倍的时间。
public static void main(String[] args){ int i,j,m; for(i=101;i<=200;i=i+2){
m=(int)Math.sqrt(i);
for(j=2;j<=m;j++){
if(i%j==0)break;
if(j>=m){
System.out.println(i);}
}
}
}
}
public static void main(String[] args){ int i,j,m; for(i=101;i<=200;i=i+2){
m=(int)Math.sqrt(i);
for(j=2;j<=m;j++){
if(i%j==0)break;
if(j>=m){
System.out.println(i);}
}
}
}
}
public class MainFrame { public static void main(String args[]) {
int i = 101;
boolean flag = true;
while (i < 200) {
flag = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag) {
System.out.println(i);
}
i++;
}
}}
你试一下,结果不是出来了.逻辑上的错误.
public static void main(String[] args)
{
int i, j, n = 0;
for(i = 101; i<=200; i++)
{
for(j = 2; j<i; j++)
{
if(i%j==0)
{
break;
}
}
if (j>=i)
{
System.out.print(i + " ");
n++;
}
if (n%10==0)
{
System.out.println();
}
}
}
}