我想创建一个程序,显示素数的位置,用户输入素数索引。基本上,将显示第n个素数,其中n由用户输入。然而,该计划无效,任何帮助将不胜感激。代码写在下面,任何人都可以告诉我它有什么问题吗?
apple_array.inject(0) { |sum, e| sum + e.apples_eaten }
答案 0 :(得分:2)
我弄错了
import java.io.*;
public class Nth_Prime
{
public static void main()throws Exception
{
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Which Prime number would you like to find?");
int n = Integer.parseInt(stdin.readLine());
int k = 0;
int checker = 0;
int counter = 1;
int num=0;
for(int i=3;;i++)
{
k=0;
checker=0;
for(int j=2;j<i;j++)
{
if(i%j==0)
{
checker++;
}
}
if(checker==0)
{
k++;
}
if(k!=0)
{
num=i;
counter++;
}
if(counter==n)
{
System.out.println("The number is: "+num);
break;
}
else
{
continue;
}
}
}
}
这是有效的,但感谢你的帮助
答案 1 :(得分:2)
我更喜欢创建包含素数值和素数值的HashMap,尝试这个小应用程序:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
public class Nth_Prime {
static boolean checkPrime(int n)
{
for (int i=2;i<n;i++)
{
if(n%i==0)
return false;
}
return true;
}
static HashMap<Integer,Integer> map=new HashMap<Integer, Integer>();
public static void main(String[] args) throws Exception {
BufferedReader stdin = new BufferedReader(new InputStreamReader(
System.in));
map.put(1, 2);
System.out.println("Which Prime number would you like to find?");
while(true)
{
int n = Integer.parseInt(stdin.readLine());
if( n<0)
return;
if(map.containsKey(n))
{
System.out.println("The number is: " + map.get(n));
}
else
{
int size=map.size();
int lastKey=size;//(int) map.keySet().toArray()[size-1];
int lastValue=map.get(lastKey);
for (int i = lastValue; i < 1000; i++) {
if(checkPrime(i))
{
map.put(size, i);
size++;
if(map.containsKey(n))
{
System.out.println("The number is: " + map.get(n));
System.out.println("Which Prime number would you like to find?");
break;
}
}
}
}
}
}
}
答案 2 :(得分:0)
为什么你的代码错误(提供错误的输出) ::当i
为25
时,你的内部for循环会在{k
时增加j = 2, 3, 7 ...
1}}并且在退出内部for
循环后,您的if
条件if(k!=0)
会进行检查,因此对于25
,您的k
应该在{{1}附近因此,你甚至将22
算作素数(这是错误的)。
尝试这样做。我将变量25
替换为k
,每次boolean flag
我都设置为false
,即i%j == 0
除j
(表示i
i
不是素数,因此不计算在内。
for(int i=3;i<100;i++)
{
boolean flag = true;
for(int j=2;j<i;j++)
{
if(i%j==0)
{
flag = false;
break;
}
}
if(flag)
{
num=i;
counter++;
}
if(counter==n)
{
System.out.println("The number is: "+num);
break;
}
}
极少数优化::
1)您可以考虑将第二个for
循环更改为for(int j=2;j<Math.sqrt(i);j++)
,因为要检查素数条件,您无需检查sqrt(i)
以外的内容,因为在此之后会重复这些因素。
2)您应考虑使用Sieve of Eratosthenes作为寻找素数的更佳方式。
答案 3 :(得分:0)
尝试这种方式:
int num, count, i;
num=1;
count=0;
while (count < nth){
num=num+1; //find the next prime number
for (i = 2; i <= num; i++){
if (num % i == 0) {
break; //prime not found
}
}
if ( i == num){
count = count+1; //prime found
}
}
System.out.println("The number is: "+num);