LQ0206 组素数枚举+素数

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0206 组素数枚举+素数相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2013初赛 Java C组B题

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

素数就是不能再进行等分的数。比如:2 3 5 7 11 等。 9=3∗3 说明它可以3等分,因而不是素数。

我们国家在 1949 年建国。如果只给你 1 9 4 9 这 4 个数字卡片,可以随意摆放它们的先后顺序(但卡片不能倒着摆放啊,我们不是在脑筋急转弯!),那么,你能组成多少个 4 位的素数呢?

比如:1949,4919 都符合要求。

请你输出能组成的 4 位素数的个数,不要罗列这些素数!!

问题分析
用置换函数进行枚举,再进行素数判定。
1 9 4 9 这 4 个数字组成的最大值是9941,用试除法判定素数时只需要试除到根9941的平方根为止。

AC的C语言程序如下:

/* LQ0206 组素数 */

#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

const int END = sqrt(9941);
int a[] = 1, 4, 9, 9;

bool isprime(int n)

    if (n % 2 == 0) return false;
    for (int i = 3; i <= END; i += 2)
        if (n % i == 0) return false;
    return true;


int main()

    int cnt = 0;
    do 
        int n = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
        if (isprime(n)) cnt++;
     while (next_permutation(a, a + 4));
    printf("%d\\n", cnt);

    return 0;

以上是关于LQ0206 组素数枚举+素数的主要内容,如果未能解决你的问题,请参考以下文章

LQ0019 数的拆分素数

LQ0208 梅森素数大数

LQ0110 等差素数列无标题

LQ0246 孪生素数程序填空

如何用python求友素数

Help Hanzo (素数筛+区间枚举)