【问题标题】:Take some numbers & find is it prime or not?取一些数字,找出它是质数还是非质数?
【发布时间】:2015-03-01 14:22:13
【问题描述】:
#include<stdio.h>
#include<math.h>
int main(){
    long long n,a,i,f;
    scanf("%lld",&n);
    while(n--)
    { 
        f=0;
        scanf("%lld",&a);
        for(i=2;i<=sqrt(a);i++){
             if(a%i==0){
                 f=1;
                 break;            
             }
       }
       if(f==0){
           printf("YES\n");
              }
       else
         printf("NO\n");
  }
  return 0;
}

输入的第一行是测试用例的数量。最大测试用例数 = 500, 0YES,否则为NO。 这是我的代码,每次提交时都会得到错误的答案。

Sample Input (Plaintext Link)
5

2
3
4
5
6
Sample Output (Plaintext Link)
YES
YES
NO
YES
NO

【问题讨论】:

  • 对于大整数值,您需要 long long 5*10^9
  • 尝试使用 long long int(或简称 long long),在 google 搜索中 long int 的范围是 4,294,967,295,略小于约束。
  • 哪个输入不起作用?
  • 只是为了减少运行时间而不是在循环中使用sqrt(a),在外面找到它并将其存储在一个变量中并在循环中使用它
  • 提供一个失败的例子。

标签: c


【解决方案1】:

您提到测试用例在0 &lt;= n &lt;= 5*10^9 范围内。您的算法为数字01 打印YES。它可能应该为每一个打印NO,因为它们并不是真正的素数。检查这些数字的问题说明并打印适当的答案。

【讨论】:

  • 是的,对于 0 和 1,它正在打印“是”。那么,我该如何克服呢?
  • 在使用scanf("%lld",&amp;a); 读取a 之后计算f = a &lt; 2;,而不是f=0;
【解决方案2】:

构建可执行文件时必须包含数学库。对于 Unix/Linux,您可以使用 -lm 命令进行编译。

gcc test.c -o test -lm

如果您是在线提交,则必须创建自己的sqrt() 函数。

【讨论】:

  • 如果函数不可用会产生编译时错误。
  • sqrt() 定义在math.h
猜你喜欢
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2011-11-19
  • 2019-05-17
  • 2022-12-12
相关资源
最近更新 更多