首页
学习
活动
专区
圈层
工具
发布

原蛙
EN

Code Golf用户
提问于 2017-10-19 07:47:28
回答 4查看 7.8K关注 0票数 45

“主要青蛙”是一种奇怪的动物,它在整数之间跳跃,直到3或19点到达.

您的程序应该接受整数n作为输入,并输出以下算法(319)的结果。

对于给定的整数n >= 2

  1. f成为青蛙的位置。它最初被设置为n
  2. 如果f = 3f = 19:青蛙停止跳-停止程序并输出f
  3. 如果f是素数:青蛙跳到2×f-1位置。回到第二步。
  4. 如果f是复合的:让df's的最大素数因子。青蛙跳到f-d位置。回到第二步。

示例:

n = 5的一个例子:

代码语言:javascript
复制
5 > 9 > 6 > 3 stop

程序应该输出3

n = 23的另一个例子是:

代码语言:javascript
复制
23 > 45 > 40 > 35 > 28 > 21 > 14 > 7 > 13 > 25 > 20 > 15 > 10 > 5 > 9 > 6 > 3 stop

同样,程序应该输出3

测试用例:

代码语言:javascript
复制
10 => 3
74 => 19
94 => 3
417 => 3
991 => 19
9983 => 19

您可以假设是1 < n < 1000000 (我已经为这些值检查了程序结束)。

EN

回答 4

Code Golf用户

发布于 2017-10-19 09:48:11

外壳,15字节

代码语言:javascript
复制
Ω€p57§|o←DṠ-o→p

在网上试试!

解释

代码语言:javascript
复制
Ω€p57§|o←DṠ-o→p  Implicit input n.
Ω                Do this to n until
 €p57            you get a prime factor of 57 (which are 3 and 19):
            o→p   Take last element of the prime factors of n
          Ṡ-      and subtract it from n,
     §|           or if this gives 0 (so n is prime),
       o←D        double and decrement n.
票数 7
EN

Code Golf用户

发布于 2017-10-20 01:25:59

Python 3,97字节

代码语言:javascript
复制
f=lambda n:n*(n&-17==3)or f(n-max(k*all(n%k<k%j for j in range(2,k))for k in range(n+1))or 2*n-1)

在网上试试!

票数 2
EN

Code Golf用户

发布于 2017-10-19 16:51:36

公理,93字节

代码语言:javascript
复制
h(n)==(repeat(n=3 or n=19 or n<2=>break;prime? n=>(n:=2*n-1);n:=n-last(factors(n)).factor);n)

测试:

代码语言:javascript
复制
(4) -> [[i,h(i)] for i in [10,74,94,417,991,9983]]
   (4)  [[10,3],[74,19],[94,3],[417,3],[991,19],[9983,19]]
                                                  Type: List List Integer

将有68个字节函数。

代码语言:javascript
复制
q x==(n<4=>3;n=19=>n;prime? n=>q(2*n-1);q(n-last(factors n).factor))

但是对于n=57991 (如果我还记得的话),它将退出保留的堆栈空间。

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/145741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档