我要哭了,怎么用筛法求1到1000的素数啊,我写了下面的代码,谁可以帮我看看吗,主要是调用方法那里

啾啾啾九九 2020-10-18 04:07:57
package sushu; public class Sushu1 { public static void main(String[] args) { // TODO Auto-generated method stub int[] data; data=new int[1000]; System.out.println("1~1000以内的素数如下所示"); InputData(data); CalcPrimeNum(data); PrintPrimeNum(data); } //定义方法1:输入1~1000的数据(实现数据赋值的方法) public static void InputData(int[] data) { for(int i=0;i<data.length;i++){ int i = 0; data[i]=i+1; } } //定义方法2:去掉输入数据里所有的非素数 public static void CalcPrimeNum(int[] data) { int i,j,temp; data[0]=0; for(i=1;i<data.length;i++){ for(j=i+1;j<1000;j++) { if(data[j]!=0){ temp=data[j]%data[i]; if(temp==0) { data[i]=0; } } } } } //定义方法3:实现一行打印10个素数的格式打印所有的素数 public static void PrintPrimeNum(int[] data) { int items=0; for(int i=0;i<data.length;i++) { if(data[i]!=0) { System.out.printf("%5d", data[i]); items++; if(items%10==0) System.out.println(); } } } }
...全文
8334 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
啾啾啾九九 2020-10-24
  • 打赏
  • 举报
回复
引用 9 楼 唯丶丶丶的回复:
[quote=引用 6 楼 暂未名 的回复:][quote=引用 3 楼 KeepSayingNo的回复:]两个for循环就可以搞定 第一个for遍历1-1000 第二个for遍历1到当前这个数:如果能被其它整除,就跳出,如果遍历完了还不能整除,就是素数,放入数组
public static void CalcPrimeNum(int[] data) { int i,j,temp; data[0]=0; for(i=1;i<data.length;i++){ if(data[i]!=0){     for(j=i+1;j<1000;j++) {      if(data[j]!=0){       temp=data[j]%data[i];     if(temp==0) {      data[i]=0;     }     } } }   } } 你好可以帮我看看这个代码吗,它显示存在整数除法中除数为0的异常[/quote] 你把data[i]=0了,还用它当除数,能不异常吗[/quote] 噢噢不用了我知道哪里搞错了
啾啾啾九九 2020-10-24
  • 打赏
  • 举报
回复
前面不是有date[i]!=0才进行下面步骤的前提条件吗,那我需要怎么修改
唯丶丶丶 2020-10-23
  • 打赏
  • 举报
回复
引用 6 楼 暂未名 的回复:
[quote=引用 3 楼 KeepSayingNo的回复:]两个for循环就可以搞定 第一个for遍历1-1000 第二个for遍历1到当前这个数:如果能被其它整除,就跳出,如果遍历完了还不能整除,就是素数,放入数组
public static void CalcPrimeNum(int[] data) { int i,j,temp; data[0]=0; for(i=1;i<data.length;i++){ if(data[i]!=0){     for(j=i+1;j<1000;j++) {      if(data[j]!=0){       temp=data[j]%data[i];     if(temp==0) {      data[i]=0;     }     } } }   } } 你好可以帮我看看这个代码吗,它显示存在整数除法中除数为0的异常[/quote] 你把data[i]=0了,还用它当除数,能不异常吗
qq_39936465 2020-10-23
  • 打赏
  • 举报
回复
引用 6 楼 暂未名 的回复:
[quote=引用 3 楼 KeepSayingNo的回复:]两个for循环就可以搞定 第一个for遍历1-1000 第二个for遍历1到当前这个数:如果能被其它整除,就跳出,如果遍历完了还不能整除,就是素数,放入数组
public static void CalcPrimeNum(int[] data) { int i,j,temp; data[0]=0; for(i=1;i<data.length;i++){ if(data[i]!=0){     for(j=i+1;j<1000;j++) {      if(data[j]!=0){       temp=data[j]%data[i];     if(temp==0) {      data[i]=0;     }     } } }   } } 你好可以帮我看看这个代码吗,它显示存在整数除法中除数为0的异常[/quote] 你这个问题明显 , 不应该是data[i]=0,应该是data[j]=0,先把筛选法搞清楚。
啾啾啾九九 2020-10-23
  • 打赏
  • 举报
回复
引用 3 楼 KeepSayingNo的回复:
两个for循环就可以搞定 第一个for遍历1-1000 第二个for遍历1到当前这个数:如果能被其它整除,就跳出,如果遍历完了还不能整除,就是素数,放入数组
public static void CalcPrimeNum(int[] data) { int i,j,temp; data[0]=0; for(i=1;i<data.length;i++){ if(data[i]!=0){     for(j=i+1;j<1000;j++) {      if(data[j]!=0){       temp=data[j]%data[i];     if(temp==0) {      data[i]=0;     }     } } }   } } 你好可以帮我看看这个代码吗,它显示存在整数除法中除数为0的异常
tianfang 2020-10-19
  • 打赏
  • 举报
回复


public class Sushu1 {
	public static void main(String[] args) {
// TODO Auto-generated method stub
		int[] data;
		data = new int[1000];
		System.out.println("1~1000以内的素数如下所示");

		InputData(data);

		CalcPrimeNum(data);

		PrintPrimeNum(data);
	}

//定义方法1:输入1~1000的数据(实现数据赋值的方法)
	public static void InputData(int[] data) {
		for (int i = 0; i < data.length; i++) {
			data[i] = 1;
		}
	}

//定义方法2:去掉输入数据里所有的非素数
	public static void CalcPrimeNum(int[] data) {
		int i, j;
		data[0] = 0;
		data[1] = 0;
		int toplimit = (int) (Math.sqrt(data.length) + 0.5);
		for (i = 1; i < toplimit; i++) {
			if (data[i] != 0) {
				for (j = 2; j < data.length / i + 1; j++) {
					if (i * j < data.length) {
						data[i * j] = 0;
					}
				}
			}
		}
	}

	// 定义方法3:实现一行打印10个素数的格式打印所有的素数
	public static void PrintPrimeNum(int[] data) {
		int items = 0;
		for (int i = 0; i < data.length; i++) {
			if (data[i] != 0) {
				System.out.printf("%5d", i);
				items++;
				if (items % 10 == 0)
					System.out.println();

			}

		}
	}

}
qq_39936465 2020-10-19
  • 打赏
  • 举报
回复
引用 1 楼 暂未名 的回复:
弄错了,看这个 public class Sushu1 { public static void main(String[] args) {   // TODO Auto-generated method stub     int[] data;     data=new int[1000];     System.out.println("1~1000以内的素数如下所示");          InputData(data);          CalcPrimeNum(data);          PrintPrimeNum(data); } //定义方法1:输入1~1000的数据(实现数据赋值的方法) public static void InputData(int[] data) {  for(int i=0;i<data.length;i++){ data[i]=i+1;    } } //定义方法2:去掉输入数据里所有的非素数 public static void CalcPrimeNum(int[] data) { int i,j,temp; data[0]=0; for(i=1;i<data.length;i++){     for(j=i+1;j<1000;j++) {      if(data[j]!=0){       temp=data[j]%data[i];     if(temp==0) {      data[i]=0;     }     } } }   }     //定义方法3:实现一行打印10个素数的格式打印所有的素数 public static void PrintPrimeNum(int[] data) {      int items=0;      for(int i=0;i<data.length;i++) {      if(data[i]!=0) {        System.out.printf("%5d", data[i]);      items++;      if(items%10==0)      System.out.println();           }           }      }        }

public static void CalcPrimeNum(int[] data) {
		int i, j;
		data[0] = 0;
		for (i = 2; i <=1000; i++) {
			if(data[i-1]!=0) {
				for (j =2; j <=1000/i; j++) {
					if(data[i*j-1]!=0) {
						data[i*j-1]=0;
					}
				}
			}	
		}
	}
KeepSayingNo 2020-10-19
  • 打赏
  • 举报
回复
两个for循环就可以搞定 第一个for遍历1-1000 第二个for遍历1到当前这个数:如果能被其它整除,就跳出,如果遍历完了还不能整除,就是素数,放入数组
老王就是我 2020-10-19
  • 打赏
  • 举报
回复
双层for循环搞定
啾啾啾九九 2020-10-18
  • 打赏
  • 举报
回复
弄错了,看这个 public class Sushu1 { public static void main(String[] args) {   // TODO Auto-generated method stub     int[] data;     data=new int[1000];     System.out.println("1~1000以内的素数如下所示");          InputData(data);          CalcPrimeNum(data);          PrintPrimeNum(data); } //定义方法1:输入1~1000的数据(实现数据赋值的方法) public static void InputData(int[] data) {  for(int i=0;i<data.length;i++){ data[i]=i+1;    } } //定义方法2:去掉输入数据里所有的非素数 public static void CalcPrimeNum(int[] data) { int i,j,temp; data[0]=0; for(i=1;i<data.length;i++){     for(j=i+1;j<1000;j++) {      if(data[j]!=0){       temp=data[j]%data[i];     if(temp==0) {      data[i]=0;     }     } } }   }     //定义方法3:实现一行打印10个素数的格式打印所有的素数 public static void PrintPrimeNum(int[] data) {      int items=0;      for(int i=0;i<data.length;i++) {      if(data[i]!=0) {        System.out.printf("%5d", data[i]);      items++;      if(items%10==0)      System.out.println();           }           }      }        }

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧