Pari GP - 检查用户是否输入了质数
Pari GP - Checking if user keyed in a prime number
我目前正在学习如何使用 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" 行通过识别它不是质数来工作,但是当我键入质数时,两条行都出现了。
如果有人能提供帮助,我们将不胜感激。
你的 if 语句每个都有两个测试,所以如果 p
是素数(第一个 if isprime(p) OR 1,第二个 if isprime(p) OR 0),则两者都为真。我想你想要这样的东西:
PrimeNo(p) = { if( isprime(p), print("Yep"), print("Nope") ); print(p); }
这里我们使用 Pari/GP 的 if 的 if-then-else 形式,所以如果 isprime(p) 为真,我们执行第一项,如果为假,则执行第二项。这也有只调用 isprime
一次的优点,如果您的数字很大(也可以争论 ispseudoprime
与 isprime
但 64 位输入没有区别,这一点很重要).
我目前正在学习如何使用 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" 行通过识别它不是质数来工作,但是当我键入质数时,两条行都出现了。
如果有人能提供帮助,我们将不胜感激。
你的 if 语句每个都有两个测试,所以如果 p
是素数(第一个 if isprime(p) OR 1,第二个 if isprime(p) OR 0),则两者都为真。我想你想要这样的东西:
PrimeNo(p) = { if( isprime(p), print("Yep"), print("Nope") ); print(p); }
这里我们使用 Pari/GP 的 if 的 if-then-else 形式,所以如果 isprime(p) 为真,我们执行第一项,如果为假,则执行第二项。这也有只调用 isprime
一次的优点,如果您的数字很大(也可以争论 ispseudoprime
与 isprime
但 64 位输入没有区别,这一点很重要).