我目前正在学习如何使用Pari GP,现在我正在尝试编写一个代码,用于检查用户是否输入了素数键。
这是我的代码。
printf("\t%s \n","PrimeNo(P): To check if it is a prime or not");
PrimeNo(p)={
if(isprime(p)||1, print("Prime numbers only"));
if(isprime(p)||0, print("Prime numbers stored"));
print(p);
}
问题是我的第一个“if”行通过识别它不是素数而起作用,但是当我键入素数时,两行都出现了。
如果有人可以提供帮助,我们将不胜感激。
答案 0 :(得分:0)
你的if语句每个都有两个测试,所以如果p
为素数,则两者都为真(第一个是isprime(p)OR 1,第二个是isprime(p)或0)。我想你想要的东西:
PrimeNo(p) = { if( isprime(p), print("Yep"), print("Nope") ); print(p); }
这里我们使用if-then-else形式的Pari / GP's if,所以如果isprime(p)为真,我们会做第一项,如果是假则我们做第二项。这也有一个优势,就是只调用isprime
一次,这对于你的数字很大很重要(人们也可以讨论ispseudoprime
与isprime
,但64位输入没有区别)。