我试图在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);
}
}
答案 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)
除非你对一个素数字符串数组有其他目的,否则不要费心将它们存储在循环外的任何地方。
答案 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
中的filter
和Standard 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];