C++ 高值整数的困难

C++ 高值整数的困难,c++,C++,我遇到了一个奇怪的问题。 我的任务是打印三个数字中最小的一对,其最大公约数在[0-N]范围内是最高的,N由用户提供。 我的代码非常适用于大量数字,但我认为它无法处理非常大的值 这是我的密码: #include<iostream> using namespace std; int main() { long long n; // THE RANGE long long t; // THE NUMBER OF TEST CASES. cin>>t; for(l

我遇到了一个奇怪的问题。 我的任务是打印三个数字中最小的一对,其最大公约数在[0-N]范围内是最高的,N由用户提供。 我的代码非常适用于大量数字,但我认为它无法处理非常大的值

这是我的密码:

#include<iostream>
using namespace std;
int main()
{   

long long  n; // THE RANGE 
long long  t; // THE NUMBER OF TEST CASES.
cin>>t; 
for(long long  i=0; i <t ; i++)
  {   cin>>n;
      if(n<3)
      {
          cout<<"-1"<<endl;
      }
       long long  gcd=0;    //GREATEST COMMON DIVISOR .
      if(n>=3)
      {
      for(long long  j=1 ; j<=n ;j++  )
      {   long long  cool=0;
          for(long long  k=j; k<=n; k++)
          {
              if(k%j==0)
              {
                  cool++;
              }
          }
          if(cool>=3)
          {
               gcd=j;
          }
      }
      cout<<endl;
      long long  count=0;
      for(long long  l= 1 ; l<=n ;l++)
        {
          if(l%gcd==0)
          {   cout<<l<<" ";
              count++;
          }
          if(count==3)
          {
              break;
          }
        }
      }

  }

return 0;
}
虽然我使用了long-long,但它无法处理15位长的输入。任何协助都将被告知。例如:

333334076666814 100000221 170438383717 340876767434 511315151151 151827062727 303654125454 455481188181 50606060603 101212121206 151818181809 770506172727 1541012345454 2311518518181 17172705050 34345410100 51518115150 4050572729393 8101145458786 12151718188179 5050606060 10101212120 15151818180 5050628283 10101256566 15151884849
184050508505050368101017010100 55215525515150

我假设您的运行时间太长,无法接受。看看你的代码:

for(long long j=1 ; j<=n ;j++ )
{ 
    long long cool=0; 
    for(long long k=j; k<=n; k++) 
    { 
        if(k%j==0) { cool++; }
    }
我的建议是找到一种O1方法,以获得与无循环相同的结果:

long long cool=0; 
for(long long k=j; k<=n; k++) 
{ 
   if(k%j==0) { cool++; }
}

您还有其他低效之处,这仍然会使您的代码慢得令人无法接受。对于15位数字,即使打开也太慢。找出如何避免对所有n个值进行迭代。您有两个这样的循环,它们必须被替换或提前终止。

什么意思?编译时间用完了?您是否正在进行代码竞赛,并且您得到了需要花费很长时间的TLE或错误?编译时间不足。什么我不知道有哪一个编译器有时间限制……对不起,伙计们,它无法处理1编译时间决不会受到输入的影响,因为你只能在程序编译后向它提供输入。2编译器只是在黑色窗口中运行,没有结果。一旦你开始运行你的程序,编译器就不再运行了。3如果您的代码工作正常,并且您只想提高它的性能,那么这是一个更好的问题。您可以使用std::numeric\u limits检查long可以容纳的最大值。如果你需要更大的数字,你必须使用非标准的图书馆。谢谢你,谢谢你的指导,我会照你说的做,
long long cool=0; 
for(long long k=j; k<=n; k++) 
{ 
   if(k%j==0) { cool++; }
}