任何人都可以帮助理解这个java程序吗?
它只是打印素数,当你输入你想要的数量时它就能正常工作。
class PrimeNumbers
{
public static void main(String args[])
{
int n, status = 1, num = 3;
Scanner in = new Scanner(System.in);
System.out.println("Enter the number of prime numbers you want");
n = in.nextInt();
if (n >= 1)
{
System.out.println("First "+n+" prime numbers are :-");
System.out.println(2);
}
for ( int count = 2 ; count <=n ; )
{
for ( int j = 2 ; j <= Math.sqrt(num) ; j++ )
{
if ( num%j == 0 )
{
status = 0;
break;
}
}
if ( status != 0 )
{
System.out.println(num);
count++;
}
status = 1;
num++;
}
}
}
对于循环条件我不明白这个
for ( int j = 2 ; j <= Math.sqrt(num) ; j++ )
为什么我们采用sqrt的num ...这是3 ....为什么我们假设它为3?
答案 0 :(得分:2)
想象一下,n
可以除以大于k
的数字sqrt(n)
。然后你有:
n = k * j
其中j
是一个必须小于sqrt(n)
的数字(如果k
和j
都大于sqrt(n)
那么他们的产品会更大比n
)。
所以你只需要找到小于或等于sqrt(n)
的除数,你可以通过一个简单的除法找到大于或等于sqrt(n)
的除数。在我的示例中,找到j
后,您可以找到k = n / j
。
答案 1 :(得分:1)
有问题的线基本上是试图找到你给定数字因子的数字(并将它们作为非素数消除)。如果您没有找到给定数字的因子,那么您可以说该数字是素数。
就发现因素而言,你只需要达到sqrt(N),因为如果你走得更高,你会看到你以前见过的数字。这是因为每次找到一个因素,你实际上找到了两个因素。如果a是N的因子,那么N / a和a都是N的因子。
答案 2 :(得分:0)
如果满足N = A * B的唯一整数为1且N(或N和1),则数字N为素数。
现在检查数字N为素数,我们可以搜索从2到N的所有A,从2到N搜索B,看看N = A * B.这将花费O(N ^ 2)时间,并且效率非常低。
事实证明,我们只需要将N除以一个数字,看看是否有余数。这将其归结为O(N)。
此外,我们不需要检查从A = 2到A = N的所有方式。如果A大于sqrt(N),则B必须小于sqrt(N)。因此,我们只需要检查A从2到sqrt(N)以查看N / A是否有余数。
答案 3 :(得分:0)
如果我是对的,那么在数学中有一个理论,说几乎所有质数都可以在检查从2到2的平方根的数字时确定,而不是检查从2到2或2到n / 2的所有数字。
答案 4 :(得分:0)
数字因子只能从1到sqrt的num。因此,我们不会检查从1到num的因子,而是检查从1到sqrt(num)的所有数字,看看是否有任何数字除以num。如果有任何除数num,它不是素数,否则它是。这提高了代码的效率。
答案 5 :(得分:0)
快速但又脏的解决方案..
import java.util.Scanner;
class testing
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
int n, i, j, count = 1;
System.out.print("How many Numbers ? : ");
n = input.nextInt();
for(j = 1;count<=n;j++)
{
if(j==1 || j==2)
{
System.out.println(j);
count++;
continue;
}
for(i=2;i<=j/2;i++)
{
if(j%i==0)
break;
else if(i == j/2 && j%i != 0)
{
System.out.println(j);
count++;
}
}
}
}
}
答案 6 :(得分:-1)
public class PrimeNumber {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList a = new ArrayList();
for (int i = 1; i <= 100; ++i) {
if (isPrime(i))
a.add(i);
}
System.out.println("List : " + a);
}
public static boolean isPrime(int value) {
if (value <= 1)
return false;
if ((value % 2) == 0)
return (value == 2);
for (int i = 3; i <= value - 1; i++) {
if (value % i == 0) {
return false;
}
}
return true;
}
}