有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在素数数组中查找特定数

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

挑战在于将包含“3”的所有素数(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) 个答案

  1. # 1 楼答案

    此代码生成50个数字排列,其数字中有四个“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. # 2 楼答案

    最多只能有五位数字,其中四位必须是3。那么,关于剩余的数字,你能说些什么呢

    手工写出结果数字,然后测试每个数字的素性并不难。由于要测试的数字不超过50个,即使是最简单的按赔率划分的试验也可以

    但是如果你想以编程的方式生成数字,只需使用5个循环:将10,000添加到033339次;将1,000添加到303339次;将100添加到330339次;等等,在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];
    
  3. # 3 楼答案

    请参考下面的代码来验证所有这些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. # 4 楼答案

    1. 迭代每个素数
    2. 对于每个素数,使用整数将其转换为字符串。toString(int)静态方法
    3. 使用这个字符串,迭代每个字符(使用for循环和非静态方法string.charAt(int index))并计算该方法返回“3”的次数。(字符“3”,而不是字符串“3”)

    除非素数字符串数组有其他用途,否则不要麻烦将它们存储在循环之外的任何地方

  5. # 5 楼答案

    使用Sieve of Eratosthenes上的练习中的primes函数,以及Standard Prelude中的^{}^{}函数,此Scheme表达式可以找到七种解决方案:

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

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

  6. # 6 楼答案

    这个问题听起来像是一个家庭作业,所以你应该写下你想到了什么,以及你到目前为止尝试了什么

    数数的方法有很多。为了给您一个提示,您可以使用提醒操作(在Java中)%

    56 % 10 = 6
    25 % 5  = 0
    

    所以,当你除以10并使用提醒操作时,你可以得到你号码的最后一位。现在用一个循环和计数器,你会没事的

    另一个选项(非常难看,所以不要真的使用它:)-把你的数字变成一个String并在它的字符上迭代(循环)

    希望这对你有所帮助,祝你好运