首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >is_gaussian_prime(z)?

is_gaussian_prime(z)?
EN

Code Golf用户
提问于 2014-08-07 15:54:54
回答 3查看 1.9K关注 0票数 23

任务

编写一个接受两个整数a,b表示高斯整数z = a+bi (复数)的函数。程序必须返回true或false,这取决于a+bi高斯素数

定义

a+bi是高斯素数当且仅当它满足下列条件之一:

  • ab都是非零的,a^2 + b^2是素数
  • a是零,|b|是素数,|b| = 3 \text{ (mod }4)
  • b是零,|a|是素数,|a| = 3 \text{ (mod }4)

详细信息

你应该只写一个函数。如果您的语言没有函数,则可以假设整数存储在两个变量中,并打印结果或将其写入文件。

您不能使用语言的内置函数,如isprimeprime_listnthprimefactor。最少的字节数获胜。程序必须适用于a,b,其中a^2+b^2是一个32位(有符号)整数,并且应该在不超过30秒的时间内完成。

素数列表

点表示高斯平面上的素数(x =实,y =虚轴):

一些较大的素数:

代码语言:javascript
运行
复制
(9940, 43833)
(4190, 42741)
(9557, 41412)
(1437, 44090)
EN

回答 3

Code Golf用户

发布于 2014-08-07 17:03:17

Haskell -- 121个字符(包括新行)

这里有一个相对简单的Haskell解决方案,它不使用任何外部模块,并尽可能地降低。

代码语言:javascript
运行
复制
a%1=[]
a%n|n`mod`a<1=a:2%(n`div`a)|1>0=(a+1)%n
0#b=2%d==[d]&&d`mod`4==3where d=abs(b)
a#0=0#a
a#b=2%c==[c]where c=a^2+b^2

调用为ghci ./gprimes.hs,然后可以在交互式shell中使用它。注意:负数是非常严格的,必须放在括号中。也就是说。

代码语言:javascript
运行
复制
*Main>1#1
True
*Main>(-3)#0
True
*Main>2#2
False
票数 3
EN

Code Golf用户

发布于 2019-10-19 20:29:31

APL,99个字符,198个字节

代码语言:javascript
运行
复制
r←p w;i;k
r←0⋄→0×⍳w<2⋄i←2⋄k←√w⋄→3
→0×⍳0=i∣w⋄i+←1
→2×⍳i≤k
r←1

f←{v←√k←+/2*⍨⍺⍵⋄0=⍺×⍵:(p v)∧3=4∣v⋄p k}

测试:

代码语言:javascript
运行
复制
  0 f 13
0
  0 f 9
0
  2 f 3
1
  3 f 4
0
  0 f 7
1
  0 f 9
0
  4600 f 5603
1  
票数 1
EN

Code Golf用户

发布于 2019-11-19 00:56:40

Mathematica,149个字符

代码语言:javascript
运行
复制
If[a==0,#[[3]]&&Mod[Abs@b,4]==3,If[b==0,#[[2]]&&Mod[Abs@a,4]==3,#[[1]]]]&[(q=#;Total[Boole@IntegerQ[q/#]&/@Range@q]<3&&q!=0)&/@{a^2+b^2,Abs@a,Abs@b}]

该代码不使用mathematica的任何标准素数特性,而是计算列表{n/1、n/2、.、n/n}中整数的数量;如果该数为1或2,则n为素数。这一职能的一种详细形式:

代码语言:javascript
运行
复制
MyIsPrime[p_] := (q = Abs@p; 
  Total[Boole@IntegerQ[q/#] & /@ Range@q] < 3 && q != 0)

从-20到20的所有高斯素数的加成图:

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

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

复制
相关文章

相似问题

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