查找素数数组中的特定数字

时间:2012-07-03 13:23:01

标签: java arrays primes

我试图在Java中找到具有特定条件的素数。

挑战在于显示包含''的所有素数(低于100.000)。四次。 我已经有一个代码显示了100.000以下的所有素数,但我似乎无法弄清楚如何计算包含数字的那些素数' 3'四次。 然而,我可以计算所有素数。

有人可以帮我这个吗?

这里是我的代码,我将把数字放在字符串中?

    package Proeftentamen;

import java.util.regex.*;

/**
 *
 * @author Stefan
 */
public class Vraag_6 {

    /// priemgetallen waar 4x een 3 in voor komt???? wtf...
    public static void main(String[] args) {
        boolean[] lijst = new boolean[1000000]; // hoeveelheid getallen
        vularray(lijst);
        lijst = zeef(lijst);
        drukaf(lijst);
    }

    public static void vularray(boolean[] lijst) {
        for (int i = 2; i < lijst.length; i++) {
            lijst[i] = true;
        }
    }

    public static boolean[] zeef(boolean[] lijst) {
        for (int i = 2; i < lijst.length / 2; i++) {
            if (lijst[i]) {
                for (int j = 2 * i; j < lijst.length; j += i) {
                    lijst[j] = false;
                }
            }
        }
        return lijst;
    }

    public static void drukaf(boolean[] lijst) {
        int count = 0;
        for (int i = 2; i < lijst.length; i++) {
            if (lijst[i] == true) {
                System.out.println(i + " " + lijst[i]);
                count++;
            }
        }
        System.out.println("Aantal priemgetallen: " + count);
    }
}

6 个答案:

答案 0 :(得分:3)

这个问题听起来像是一个家庭作业,所以你应该记下你的想法以及你到目前为止的尝试。

有很多方法可以统计数字。只是为了给你一个线索,你可以使用提醒操作(在Java中 - %):

56 % 10 = 6
25 % 5  = 0

因此,当您除以10并使用提醒操作时,您可以获得数字的最后一位数字。现在使用循环和计数器,你会没事的。

另一种选择(非常难看,所以不要真正使用它:)) - 将你的号码变成String并对其字符进行迭代(循环)。

希望这会有所帮助并祝你好运!

答案 1 :(得分:3)

此代码生成50个数字排列,其数字中包含4个“3” 所以检查每个主要的数字

public void generateNumbers() {
    StringBuilder s = new StringBuilder();
    s.append("3333");
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j <= 9; j++) {
            if (j%3==0) continue;
            s.insert(i,String.valueOf(j));
            int number=Integer.parseInt(s.toString());
            System.out.println(number);
            s.delete(i,i+1);
        }
    }


}

答案 2 :(得分:1)

  1. 遍历每个素数。
  2. 对于每个素数,使用Integer.toString(int)静态方法将其转换为字符串。
  3. 使用此字符串,遍历每个字符(使用for循环和非静态方法String.charAt(int index))并计算方法返回“3”的次数。 (字符'3',而不是字符串“3”)。
  4. 除非你对一个素数字符串数组有其他目的,否则不要费心将它们存储在循环外的任何地方。

答案 3 :(得分:0)

请参阅以下代码以验证所有此类prime numbers

void getPrimes(int num ,int frequency,char digit) {

    int count = 0;
    String number=Integer.toString(num);

    for (int i = 0; i < number.length(); i++) {
        if (count < frequency) {
            if (number.charAt(i) == digit)
                count++;
        }
        if (count == frequency)
        {
            System.out.println(number);
            return ;
        }

    }

}

答案 4 :(得分:0)

使用Sieve of Eratosthenes练习中的primes函数,以及digits中的filterStandard Prelude函数,此Scheme表达式找到七个解决方案:

(filter
  (lambda (n)
    (= (length
         (filter
           (lambda (d) (= d 3))
           (digits n)))
       4))
  (primes 100000))

外部过滤器在小于100000的所有素数上运行,并将外部lambda的测试应用于每个素数。内部过滤器计算每个素数的数字并仅保留3s,然后长度函数对它们进行计数,等式谓词仅保留具有4个3的那些。您可以运行该程序并在http://codepad.org/e98fow2u处查看解决方案。

答案 5 :(得分:0)

您最多只能有五位数字,其中四位必须为3.所以您对剩下的数字有什么看法?

用手写出结果数字并不难,然后测试每个数字的素数。由于测试的数字不超过50个,即使是最简单的试验除法也可以。

但是如果你想以编程方式生成数字,只需要使用5个循环:将10,000添加到03333 9次;将1,000添加到30333 9次;将100添加到33033 9次;在C ++中:

int results[50];
int n_res = 0;
int a[5] = {13333, 31333, 33133, 33313, 33331};
for( int i=0, d=10000; i<5; ++i, d/=10)
  for( int j=1; j<9; ++j, a[i]+=d )
    if( is_prime(a[i]) )
      results[n_res++] = a[i];