HDU 4282 A very hard mathematic problem (매 거 + 2 점)
http://acm.hdu.edu.cn/showproblem.php?pid=4282
제목:
방정식 을 정 하 다 : x^z + y^z + x*y*x = k;
주어진 k 에 대해 서 는 3 원 그룹 이 몇 개 있 습 니까? (x,y,z)
이 방정식 을 성립 시키다.
그 속 0
분석:
현재 문제 의 범위 와 방정식 의 구조 에 따라 각 수의 범 위 를 먼저 예측 할 수 있다.
2<=z<=32 , 1<=x
이 방정식 의 왼쪽 은 모두 단 조 롭 게 증가 하고 있 기 때문에 우 리 는 그 중의 두 개 를 매 거 할 수 있다.
그리고 2 분 동안 다른 존 재 를 판단 합 니 다. 편 의 를 위해 서. 우 리 는 z, y 를 매 거 할 수 있다.
이분 판단 x.
코드 는 다음 과 같 습 니 다:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
LL k;
LL quick(LL a,LL b)
{
LL tmp =1;
for(int i=0;i<b;i++){
tmp=tmp*a;
if(tmp>=k) return -1;
}
return tmp;
}
LL calu(LL x,LL y,LL z){
return quick(x,z)+quick(y,z)+x*y*z;
}
bool bin_search(LL y,LL z){
LL low = 1,high = y,mid;
while(low<high){
mid=(low+high)>>1;
LL tmp = calu(mid,y,z);
//cout<<"mid "<<mid<<endl;
//cout<<"tmp "<<tmp<<endl;
if(tmp==k) return true;
else if(tmp<k) low=mid+1;
else high =mid;
}
return false;
}
int main()
{
while(~scanf("%lld",&k)&&k!=0){
if(k==1||k==2){
puts("0");
continue;
}
LL INF = (LL) sqrt(k*1.0);
LL cnt=0;
for(LL z = 2;z<=32;z++){
for(LL y = 2;y<=INF;y++){
LL tmp = quick(y,z);
if(tmp == -1) break;
if(bin_search(y,z))
cnt++;
}
}
printf("%I64d
",cnt);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.