C++ 高值整数的困难
我遇到了一个奇怪的问题。 我的任务是打印三个数字中最小的一对,其最大公约数在[0-N]范围内是最高的,N由用户提供。 我的代码非常适用于大量数字,但我认为它无法处理非常大的值 这是我的密码: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
#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++; }
}