- 欧浩 的博客
我喜欢因式分解
- @ 2025-7-17 19:30:12
我喜欢因式分解 题解
题目
解题
一
最开始写的是暴力,但实在怕它太慢,就加了亿点打表,二分。于是四不像的合成怪出现了:
#include <bits/stdc++.h>
using namespace std;
int n;
int a,b;
long long t[90]={-102400000,-90224199,-79235168,-69343957,-60466176,-52521875,-45435424,-39135393,-33554432,-28629151,-24300000,-20511149,-17210368,-14348907,-11881376,-9765625,-7962624,-6436343,-5153632,-4084101,-3200000,-2476099,-1889568,-1419857,-1048576,-759375,-537824,-371293,-248832,-161051,-100000,-59049,-32768,-16807,-7776,-3125,-1024,-243,-32,-1,0,1,32,243,1024,3125,7776,16807,32768,59049,100000,161051,248832,371293,537824,759375,1048576,1419857,1889568,2476099,3200000,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,24300000,28629151,33554432,39135393,45435424,52521875,60466176,69343957,79235168,90224199,102400000};
//记录每个数字的5次方
int main()
{
int f;
cin>>n;
for(f=0;f<=80;f++)
{
int l=0,r=80;
//二分搜寻差为n的f,mid
while(l<=r)
{
int mid=(l+r)>>1;
if((t[f]-t[mid])<n)
r=mid-1;
if((t[f]-t[mid])>n)
l=mid+1;
if((t[f]-t[mid])==n)
{
cout<<f-40<<' '<<mid-40;
return 0;
}
}
}
return 0;
}
最后幸运地

二
最后去看正解,纯暴力一个:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n;
signed main()
{
int f,k;
cin>>n;
for(f=-200;f<=200;f++)
{
for(k=-200;k<=200;k++)
{
if(f*f*f*f*f-k*k*k*k*k==n)
{
cout<<f<<' '<<k;
return 0;
}
}
}
return 0;
}
emm…… 只能说下次改进前算算数据大小能不能过
诚信做人,请勿抄袭