首页 新闻 会员 周边 捐助

蓝桥杯C语言试题

0
[已解决问题] 解决于 2014-10-16 20:30

标题: 组素数

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

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

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


请你提交:能组成的4位素数的个数,不要罗列这些素数!!

爱编程1314的主页 爱编程1314 | 初学一级 | 园豆:26
提问于:2014-10-09 18:42
< >
分享
最佳答案
0

用next_permutation()求排列判断,A4 4种

奖励园豆:5
尽善尽美# | 初学一级 |园豆:152 | 2014-10-10 19:36
其他回答(1)
0

6 个

Srouni | 园豆:9 (初学一级) | 2014-10-09 19:04

要源代码

支持(0) 反对(0) 爱编程1314 | 园豆:26 (初学一级) | 2014-10-09 19:19

@爱编程1314: 

 

我只会 C# 代码,自己转换下吧,

int[] pms = PrimeNumber.GetPrimeNumbers(1000, 9999);
int[] x = pms.Where(m => m.ToString().ToArray().Distinct().Count() == 3).Where(m => (m.ToString().ToArray().Distinct().Except(new char[] { '1', '4', '9' })).Count() == 0).ToArray();

获取素数的代码网上一堆,自己找一个或自己实现个吧,我这个有性能问题,就不贴了。

支持(0) 反对(0) Srouni | 园豆:9 (初学一级) | 2014-10-09 19:32

@Srouni: 牛逼,我们还没学这么深呢,这个随机生成数查找含1,4,9的数吧

支持(0) 反对(0) 爱编程1314 | 园豆:26 (初学一级) | 2014-10-09 19:37

@Srouni: 你这个方案虽然好,但是计算的成本很高的,近1万个数字求素数,然后再检查149三个。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2014-10-09 20:10

@爱编程1314: 

对所有数字按照排列组合方式生成所有的可能(1499、1949、1994、4199、4919、4991、9149、9194、9914、9941),排除偶数,再逐个求是否为素数。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2014-10-09 20:15

@519740105: 算法没优化好,数大比较耗时。

支持(0) 反对(0) Srouni | 园豆:9 (初学一级) | 2014-10-09 20:26

@爱编程1314: 

是的。

Except 可能不太常用,其它的都是很常用的。

在这个示例中,找出 1061 个素数,再 where 成 508 ,再处理完后剩 6 个,是个比较长的过程,直接生成序列再计算,会好些。

支持(0) 反对(0) Srouni | 园豆:9 (初学一级) | 2014-10-09 20:28

@519740105: 

不过,由于我的算法问题,就他的这个问题而言,生成包含1、4 、9的与我计算 1000~9999 所需的损耗也就差:

9999 - 最后一个 包含 149 的素数后所多出的几个数。

支持(0) 反对(0) Srouni | 园豆:9 (初学一级) | 2014-10-09 20:33

@Srouni: 不对我,说错了。 可少计算 几千呢。

支持(0) 反对(0) Srouni | 园豆:9 (初学一级) | 2014-10-09 20:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册