Java 获取素数
请看一下下面的代码Java 获取素数,java,math,Java,Math,请看一下下面的代码 public class Prime { public static void main(String[]args) { int i = 2; int counter = 0; while(true) { if(counter==6)//Count still 6 { break; }
public class Prime
{
public static void main(String[]args)
{
int i = 2;
int counter = 0;
while(true)
{
if(counter==6)//Count still 6
{
break;
}
else
{
if(getPrimes(i)==true)
{
i++;
counter++;
System.out.println("Counter: "+counter);
}
else
{
System.out.println("No");
}
}
}
}
static boolean getPrimes(int num)
{
boolean result = false;
int i = 2;
while(true)
{
if((num%i) != 0) //if the number cannot be divided by any other number (except 1 and it self) it is prime
{
result = true;
System.out.println(num);
System.out.println("I is: "+i);
i=2;
break;
}
else //Not a prime. Repeat the process
{
result = false;
i++;
}
}
return result;
}
}
在这里,我试图得到0-6之间的所有素数。这是从一个非常大的数字中得到数千个素数的测试用例。然而,它并不是只显示素数,而是显示每一个数字
我做错了什么?请帮忙 我想你需要这样的东西:
public void getPrimes(int a){
for(int i = 2; i < a; i++){
int inCounter = 0;
if(counter%i==0){
System.out.println("false");
inCounter++;
}
if(inCounter == 0){
System.out.println("Prime: "+counter);
}
}
}
public void getPrimes(int a){
for(int i=2;i
在你的循环中尝试这个答案
static boolean getPrimes(int num)
{
boolean result=true; // incase u gave 1 or 2 as input.....
int i = 2;
int mid=num/2;
while(i<mid)
{
if(num%i==0)
{
result=false; // not a prime and breaks...
break;
}
else
{
result=true; // the loop make result as true.....
}
i++;
}
return result;
}
静态布尔getPrimes(int num)
{
布尔结果=true;//如果您输入了1或2。。。。。
int i=2;
int mid=num/2;
而(i使用筛子,或
下面是Robert Sedgewick在Java中的Eratosthenes实现:
我想我找到了解决办法。至少,我找到了我需要的答案。这是我的答案
import java.math.BigInteger;
public class Problem7
{
public static void main(String[]args)
{
int i = 0;
int counter = 0;
while(true)
{
if(i>6)
{
break;
}
if(i>1)
{
String str = String.valueOf(i);
if (new BigInteger(str).isProbablePrime(i/2))
{
System.out.println(str);
counter++;
}
}
i++;
}
}
}
我想这是最简单的方法…导入java.util.Scanner;
import java.util.Scanner;
class PrimeNumbers2
{
public static void main (String[] args)
{
Scanner scanner = new Scanner(System.in);
int i =0;
int num =0;
//Empty String
String primeNumbers = "";
System.out.println("Enter the value of n:");
int n = scanner.nextInt();
for (i = 1; i <= n; i++)
{
int counter=0;
for(num =i; num>=1; num--)
{
if(i%num==0)
{
counter = counter + 1;
}
}
if (counter ==2)
{
//Appended the Prime number to the String
primeNumbers = primeNumbers + i + " ";
}
}
System.out.println("Prime numbers from 1 to n are :");
System.out.println(primeNumbers);
}
}
类素数2
{
公共静态void main(字符串[]args)
{
扫描仪=新的扫描仪(System.in);
int i=0;
int num=0;
//空字符串
字符串素数=”;
System.out.println(“输入n的值:”);
int n=scanner.nextInt();
对于(i=1;i=1;num--)
{
如果(i%num==0)
{
计数器=计数器+1;
}
}
如果(计数器==2)
{
//将素数追加到字符串
素数=素数+i+“”;
}
}
System.out.println(“从1到n的素数是:”);
System.out.println(素数);
}
}
它将显示所有素数。用最小迭代查找素数
布尔IsPrimeNumber(int num){
boolean isPrime=true;
如果(num==1 | | num==0)
isPrime=false;
否则{
int limit=(int)Math.sqrt(num);
对于(长i=2L;i),答案解决了素数问题。还有一个问题:如果getPrimes
返回false
,你的主循环将被卡住并无限期地继续,因为在这种情况下,你永远不会增加i
或计数器
。另外,任何时候你写write(true)
,你应该退后一步,更仔细地审视你的逻辑。99%的时候,你可以在控制结构中加入一个更智能的终止条件。1%的情况存在,但很少见。@MarkByers:这是我一直讨厌的问题!不,这不是TTTTTT。只是我为建立我的逻辑而做的一件小事IQ@Sepala当前位置我没有试图保护你。我只是想帮你澄清你的问题。将来,你可以试着从一开始就记住把这些信息放在你的问题中,因为这将有助于a)帮助人们针对你的情况发布更合适的答案,b)避免人们问“你讨厌的问题”因为你已经告诉了他们答案。@Sepala:当你发现要检查的“否”是复合数字时,你应该从代码中分离出来……而不是我认为你是用另一种方式做的……非常感谢你的回答。+1来自我:)如果你发现答案足够正确,你可以勾选答案……:)不需要其他部分。如果部分不正确,结果标志将在初始化时为true。非常感谢您的回复。+1来自我。:)非常感谢您的回复。+1来自我:)
boolean isPrime = true;
if (num == 1 || num ==0)
isPrime = false;
else{
int limit = (int) Math.sqrt(num);
for (long i = 2L; i <=limit ; i++)
if (num % i == 0) {
isPrime = false;
break;
}
}
return isPrime;
}