c - 如何计算一个值是否更快?

标签 c algorithm

我的程序在我的编译器中运行良好,但在在线竞赛编译器中显示超过时间限制。
输入的第一行将包含一个数字 N = 测试用例的数量。接下来的 N 行将包含数字 n 作为测试用例,其中 0<=n<=1000000000
这是我的代码。

   #include<stdio.h>
   void main()
   {   
   long t,n,i;
   int f = 0;
   scanf("%lu",&t);
   while(t--)
   {
       scanf("%lu",&n);
       f=0;
       if(n==0 || n==1)
       {
           printf("NOT PRIME\n");
       }
       else 
       {
       for(i=2;i<=n/2;i++)
       {
           if(n%i == 0)
           {
               printf("NOT PRIME\n");
               f =1;
               break;
            }
       }
       if(f==0)
       {
           printf("PRIME\n"); 
       }
   }
   }
}

我怎样才能更快地执行这个程序。帮我。提前致谢。

最佳答案

您可以迭代到 n 的平方根而不是 n/2。也可以在while循环之前预先计算出1000000000平方根范围内的所有质因数。然后尝试将 n 除以小于或等于 sqrt(n) 的素数因子,以检查它是否为素数。

for 循环:

(i = 3; i <= sqrt(n); i += 2) // skip 2 because it's the only even prime

关于c - 如何计算一个值是否更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22889626/

相关文章:

c - C 语言的战舰、数组和结构体

c - 未定义对gets_s的引用

javascript - 在javascript中按关系对数组进行排序

c - 使用 ncurses 编写文本

c++ - 如何为基于 ROM 的程序预初始化内存数据结构?

c++ - 无需 super 用户即可更改文件权限

c - 用 C 编写一个程序,输出给定数字之间的丰富数字序列的第一项和项数

algorithm - 这些输入的合并排序的运行时间是多少

algorithm - 最大二分图 (1,n) "matching"

java - 在快速排序中使用最后一个元素作为枢轴时无法解决错误