首页 > 编程知识 正文

网易云音乐官网,网易云音乐网页版在线听官网

时间:2023-05-05 23:19:24 阅读:284556 作者:2666

编写程序求出10万以内的所有素数,然后再判断这些素数中 哪些是由素数拼接而成的。例如素数23就符合条件, 23本身是素数,其由素数2,和素数3拼接(连接)组成。素数29就不满足条件,2是素数,而9不是素数。素数307不满足条件,不能忽略0. 需要把符合条件的 拼接素数全部打印出来,并统计个数。

首先我们可以定义具有100001个空间的boolean数组,当某个数为为真时,其下标对应的数就是符合条件的素数。

static boolean[] result = new boolean[100001];

根据题目的意思,可以判断出符合条件的素数必然是由2,3,5,7组成的。所以我们可以令result[2],result[3],result[5],result[7]都为真,其它的数用其默认值false。我们可以定义一个整数型counter的数,来统计符合条件的素数。

判断是不是符合条件的数,在这里分来两步。第一步来判断是不是素数。

public static boolean isPrim(int num) {

int k = (int) Math.sqrt(num);

for (int j = 2; j <= k; j++) {

if (num % j == 0) {

return false;

}

}

return true;

}

如果不是,则返回false,不需要执行第二步,直接就将该数否定掉。如果true,则执行第二步。

试想一下,如果一个数是符合题目的素数的话,将它拆成两半的话,两边的数必然还是由2,3,5,7组成的,但不一定是素数。为了计算方便,我们可以把任意一个数拆成个位和个位以前的数。我们可以通过求余和除得到这两边的数。假设int num是我们需要判断是不是符合题目的素数。

int number1 = num / 10;

int number2 = num % 10;

number1是除个位以外的数,number是个位。

如果number1为0的话,我们只需要判断number2是不是为2,3,5,7就行。这是,我们只要判断result[number2]是不是为true就行。

如果number1不为0的话,我们先判断numer2。如果number2为2,3,5,7以外的数时,num必然不是符合条件的素数(若num末尾为2时,是不会执行到这一步,随意这里的2是位于num中间的)。如果number1是2,3,5,7之间的某个数的话,在来判断number1.弱国number1已经是曾经判断过,是符合题目条件的素数了的话,即result[number1]为true,则不需要继续判断了,此时num已经就是符合条件的数了。如果result[number1]为false的话,那么number1必然不是符合条件的数,但num有可能是符合条件的素数。(因为该方法是自下而上进行的。)此时我们需要进一步判断number1是不是有2,3,5,7组成的即可。这是我们就可以递归了。

public static boolean isResult(int num)

我们传入参数素数参数进去,如果符合题目,就返回true。需要递归时我们返回

return isResult(number1);

即numer2符合条件了,接下类只要判断number1了。

最后,把整个代码发出来,仅供参考

public class SuShu {

static boolean[] result = new boolean[100001];

static int counter = 0;

public static boolean isPrim(int num) {

int k = (int) Math.sqrt(num);

for (int j = 2; j <= k; j++) {

if (num % j == 0) {

return false;

}

}

return true;

}

public static boolean isResult(int num) {

int number1 = num / 10;

int number2 = num % 10;

if (number1 == 0) {

if (result[num]) {

return true;

}

} else {

if (!result[number2]) {

return false;

} else {

if (result[number1]) {

return true;

} else {

return isResult(number1);

}

}

}

return false;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

result[2] = true;

result[3] = true;

result[5] = true;

result[7] = true;

counter += 4;

int num;

System.out.println(2);

System.out.println(3);

System.out.println(5);

System.out.println(7);

for (int i = 10; i < 100000; i++) {

num = i;

if (isPrim(num)) {

if (isResult(num)) {

counter++;

System.out.println(num);

}

}

}

System.out.println("共有" + counter + "个");

}

}

若有疑问或上述文章有问题的,欢迎指出。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。