C++ 互质问题。优化代码

标签 c++ optimization numbers

您好,我想优化以下代码。它试图通过将它们与 n 进行比较来找到给定范围内的所有互素数。但我想让它运行得更快……有什么想法吗?

#include <iostream>

using namespace std;

int GCD(int a, int b)
{
    while( 1 )
    {
        a = a % b;
  if( a == 0 )
   return b;
  b = b % a;

        if( b == 0 )
   return a;
    }
}


int main(void){
 int t;
 cin >> t;
 for(int i=0; i<t; i++){
  int n,a,b;
  cin >> n >> a >> b;

  int c = 0;
  for(int j=a; j<=b; j++){
   if(GCD(j, n) == 1) c++;
  }

  cout << c << endl;
 }

 return 0;
}

最佳答案

这闻起来像家庭作业,所以只是一个提示。

这里不需要计算GCD。如果您可以对 n 进行因式分解(即使是尝试除以每个小于 2^16 的奇数的最粗略的方法),那么您可以只计算碰巧不能除以 n 的因数的数字。

请注意,一个 32 位数字最多有 10 个因数(我们不需要记住给定质数在因式分解中使用了多少次)。

该怎么做?尝试使用包含 - 排除原则计算非互质数。您将最多检查 1023 个素数子集,对于每个子集,您需要计算范围内的乘法次数,这是每个子集的常数时间。

无论如何,我的代码现在可以立即运行:

liori:~/gg% time ./moje <<< "1 1003917915 1 1003917915"
328458240
./moje <<< "1 1003917915 1 1003917915"  0,00s user 0,00s system 0% cpu 0,002 total

关于C++ 互质问题。优化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3692715/

相关文章:

java - 未使用的变量和方法会增加应用程序的大小吗?

c++ - 为什么 -fno-signed-zeros 单独启用优化,为此似乎还需要 -ffinite-math-only (gcc)

optimization - 我的Grails应用程序在启动时使用200 MB以上的内存是否正常?

php - PHP 中的 ISO-8601 周编号与 "Outlook"编号

c++ - 哪个 C++ 标准包含文件强制将代码/数据添加到目标文件中?

c++ - 我可以使用 C++ 作为 Windows Phone 8 的全功能开发语言吗?

c++ - 获取现有文件句柄windows C++

c++ - C++合并文件的问题

php - 检测字符串是否包含任何数字

angular - 如何在 TS (Angular) 中的数字类型变量中保留小数零?