如何找到素数

时间:2017-12-05 15:47:38

标签: c

您好我用c语言写作,下面是我的代码。我试图通过使用模数来接受输入以检查键入数字的人是否是素数。 但是我在第一个if语句中遇到错误。 错误是浮点异常(核心转储) 为什么会这样?我不允许将值与0进行比较吗?

#include <stdio.h>

int main()
{
  int i = 0, j = 0, count = 0, value = 0, stop = 0;

      scanf("%d", &j);
      stop = j;
    for(i = 0; i < stop; ++i)
    {
      value = j % i;
      if(value == 0)
      {
        ++count;
      }
    }
    if(count>1)
      {
      printf("YES");
      }
      else
      printf("NO");
            return 0;

}

实际上,下面是我的问题,虽然我可以得到输出,但我无法让我的编译正常工作。 输入

t - 测试用例的数量,然后是t测试用例。 [t <= 500] 每行包含一个整数:N [2 <= N <= 2 ^ 63-1] 输出

对于每个测试用例输出字符串&#34; YES&#34;如果给定的数字是素数且&#34; NO&#34;否则。

#include <stdio.h>

int main()
{
  int i = 0, j = 0, count = 0, value = 0, stop = 0, store[]={0}, s = 0;

      scanf("%d", &j);
      stop = j;
    for(i = 1; i < stop; ++i)
    {
      value = j % i;
      if(value == 0)
      {
        store[s]=value;
        ++count;
        ++s;
      }
    }

    if(count>=2 || j==1 )
      {
      printf("NO");
      }
      else
      printf("YES");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

我敢打赌,你会在if声明之前得到错误:

value = j % i;

这是因为你从i = 0开始:

for(i = 0; i < stop; ++i)

由于模运算符%是一个除法,因此使用0作为第二个操作数是不合法的。你得到零除错误。

顺便说一句:从1开始是毫无意义的。