3

您好我正在尝试将此代码翻译为 TI-BASIC。我在如何将 for 循环更改为 while 循环以及在 TI-BASIC 中增加一个数字时遇到问题。

#include <stdio.h>
int main()
{
  int n, i, flag=0;
  printf("Enter a positive integer: ");
  scanf("%d",&n);
  for(i=2;i<=n/2;++i)
  {
      if(n%i==0)
      {
          flag=1;
          break;
      }
  }
  if (flag==0)
      printf("%d is a prime number.",n);
  else
      printf("%d is not a prime number.",n);
  return 0;
}
4

3 回答 3

5

在这种情况下,您可以有效地使用 While 循环:

Input "NUMBER: ",A
1->B
3->I
√(A->D
If not(fPart(A/2
DelVar BWhile I<=D and B
fPart(A/I->B
I+2->I
End
If not(B
Disp "NOT
Disp "PRIME
于 2015-04-06T19:09:54.797 回答
3

在 TI-Basic 中,While 循环按您的预期工作,您可以为其设置条件。增加一个数字就像说一样简单

X+i->X  

其中“i”是增量器。
要将 For 循环更改为 While 循环,您必须设置 While 循环以不断检查数字和增量是否超过上限,同时增加每次运行的增量。


如果您想模仿 TI-Basic 中的 i++ 或 ++i(使用 While 循环),您只需更改代码的排列即可。请注意,TI-Basic For 语句始终在 ++i 下运行。示例(i++):

0->X
While X<10
Disp X
X+1->X
End

这将显示(每个数字换行)

0 1 2 3 4 5 6 7 8 9

示例(++i):

0->X
While X<10
X+1->X
Disp X
End

这将显示(每个数字换行)

1 2 3 4 5 6 7 8 9 10

需要注意的是,TI-Basic For 语句在递增时比 While 循环快得多,并且几乎总是应该被认为更适合该任务。


整合 Timtech 的跳过偶数的想法有效地减少了检查数字素数所需的时间,只需添加几行额外的行。我扩展了这个想法,跳过了二的倍数和三的倍数。

Input "Number:",X:abs(X->X
0
If not(fPart(X/2)) or not(fPart(X/3:Return
For(B,5,sqrt(X),6)
If not(fPart(X/B)) or not(fPart((X+2)/B:Return
End
1
  • 测试编号:1003001
  • 所需时间:~4 秒(比 15 秒好得多:D)
  • 大小:65 字节
于 2014-11-18T00:53:59.787 回答
2

我不明白为什么要使用 while 循环,因为 ti-basic 有 for 循环:

0->F
Input "ENTER NUMBER:",N
For(I,2,int(N/2
If N/I=int(N/I
Then
int(N/2->I
1->F
End
End

If F
Then
Disp "NUMBER IS PRIME
Else
Disp "NUMBER IS NOT PRIME
End

N/I=int(N/I是一种检查数字余数的方法(另一种说法是 N%I==0 但 ti basic 没有模数)。这里的另一个技巧是将 I 设置为其最大界限 ( int(N/2) 作为一种“中断”,就像其他语言一样

于 2014-03-18T00:34:39.507 回答