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 组素数枚举+素数的主要内容,如果未能解决你的问题,请参考以下文章