打印N编号前的每个素数

时间:2018-02-13 17:00:14

标签: java

嘿我开始使用java进行编程,我的老师在课堂上使用这个例子作为我们的家庭作业,创建一个java程序,在达到用户输入的上限之前打印出每个素数。我不理解第二部分,并想知道是否有人可以帮我向我解释。

import java.util.Scanner;

public class Primes {

    public static void main(String args[]) {

      //get input for the upper limit
      System.out.println("Enter the upper limit: ");          
      //read in the limit
      int limit = new Scanner(System.in).nextInt();

      //use for loop and isPrime method to loop through until the number reaches the limit
      for(int number = 2; number<=limit; number++){             
      //print prime numbers only before the limit 
          if(isPrime(number)){          
              System.out.print(number + ", ");                 
          }
      }    
    }    

    //this part of the program determines whether or not the number is prime by using the modulus 
    public static boolean isPrime(int number){
        for(int i=2; i<number; i++){
           if(number%i == 0){
               return false; //number is divisible so its not prime
           }
        }
        return true; //number is prime now
    }        
}

3 个答案:

答案 0 :(得分:2)

我猜你的意思是第二部分是isPrime方法。

他正在做的是使用'%'运算符,它返回'number'和'i'之间的除法的整数余数。由于素数只是自身的除数和数字1,如果余数为0,则表示不是素数。你的老师用'i'变量循环,直到极限数,并通过查看%操作的结果检查是否有任何数字。

希望这对你有所帮助!!

答案 1 :(得分:0)

在第二部分

if(number%i == 0)
如果有的话,

通常会给你一个余数。

  

例如   5%2给出1

     

4%2给出0

for(int i=2; i<number; i++)

在这里,您将从2循环到数字。由于所有数字都可以被1整除,所以从2开始。 你也要在数字(数字-1)之前停止,因为你不想检查这个数字是否可以自行整除(因为它是)。

如果一个数字可以被除1以外的任何其他数字整除(数字从2到数字-1),那么它不是素数。

答案 2 :(得分:0)

如果您需要,只需要一个简短(无效)的参考资料来查找素数:

import processing.serial.*;
import org.gamecontrolplus.gui.*;
import org.gamecontrolplus.*;
import net.java.games.input.*;

String ard_ser = "/dev/ttyACM0"; 

ControlIO control;
ControlDevice stick;
float px, py;
int deg_x, deg_y;
boolean trailOn;
Serial myPort;
ArrayList<PVector>  shadows = new ArrayList<PVector>();
ArrayList<PVector>  trail = new ArrayList<PVector>();

public void setup() {
  size(400, 400);
  myPort = new Serial(this, Serial.list()[0],9600);
  printArray(Serial.list());

  // Initialise the ControlIO
  control = ControlIO.getInstance(this);
  // Find a device that matches the configuration file
  stick = control.getMatchedDevice("joystick");
  if (stick == null) {
    println("No suitable device configured");
    System.exit(-1); // End the program NOW!
  }
  // Setup a function to trap events for this button
  stick.getButton("LASER").plug(this, "toggleLaser", ControlIO.ON_PRESS);
}

// Poll for user input called from the draw() method.
public void getUserInput() {
  px = map(stick.getSlider("X").getValue(), -1, 1, 0, width);
  deg_x = int(map(stick.getSlider("X").getValue(),-1,1,0,180));
  py = map(stick.getSlider("Y").getValue(), -1, 1, 0, height);
  deg_y = int(map(stick.getSlider("Y").getValue(),-1,1,0,180));
  //stick.getButton("LASER").plug(this,"toggleLaser",ControlIO.);
}

// Event handler for the Laser button
public void toggleLaser() {
  println("laser");          
  if (myPort.available()>0){
     myPort.write("-1\n");
  }
  //delay(1000);
  return;
}


public void draw() {
  getUserInput(); // Polling
  background(255, 255, 240);
  // Draw shadows
  fill(0, 0, 255, 32);
  noStroke();
  for (PVector shadow : shadows)
    ellipse(shadow.x, shadow.y, shadow.z, shadow.z);

  if ( trail.size() > 1) {
    stroke(132, 0, 0);
    for (int n = 1; n < trail.size(); n++) {
      PVector v0 = trail.get(n-1);
      PVector v1 = trail.get(n);
      line(v0.x, v0.y, v1.x, v1.y);
      v0 = v1;
    }
  }
  // Show position
  noStroke();
  fill(255, 64, 64, 64);
  ellipse(px, py, 20, 20);
  String position = str(deg_x)+','+str(deg_y)+'\n';
  if (myPort.available()>0){
      //println(position);
      myPort.write(position);
  }
  delay(10);
}