主页
最近更新
南昌五中-王杯 [Round 1] D 题解
最后更新于 2025-05-01 15:52:17
作者
ooliver
分类
题解
复制 Markdown
更新文章内容
这题是一道数学与数论结合的题目,题解只展示求解过程,层层递进的思考过程不予展示。 令 $z=2^i·l(l \nmid 2)$, 不难发现,当 $(i \nmid 2)$ 时, 令 $x=2^{\frac{i-1}{2}}·m,y=2^{\frac{i-1}{2}}·n.$ 原方程可列为 $m^2+mn+n^2=2l$ 此时分析奇偶,不难发现: 当 $m,n$ 同为奇或一奇一偶时,$m^2+mn+n^2$ 的值为奇数, 当 $m,n$ 同为偶时,$m^2+mn+n^2$ 的值为四的倍数, 又 $2l \nmid 4$ 且 $2l \mid 2$, $∴$ 此时原方程无解,输出```No Answer```即可. 而发现,当 $(i \mid 2)$ 时, 令 $x=2^{\frac{i}{2}}·m,y=2^{\frac{i}{2}}·n.$ 原方程可列为 $m^2+mn+n^2=l$ 根据上方的奇偶分析可以知道,在这种情况下需要对 $m,n$ 的值进行枚举. $∵m^2+mn+n^2=l$ $∴(m+\frac{1}{4}n)^2+\frac{3}{4}n^2=l$ $∵(m+\frac{1}{4}n)^2≥0$ $∴\frac{3}{4}n^2≥l$ $∴-\frac{2\sqrt{3n}}{3}≤n≤\frac{2\sqrt{3n}}{3}$ 同理,$∴-\frac{2\sqrt{3n}}{3}≤m≤\frac{2\sqrt{3n}}{3}$ 所以将 $m$ 的值枚举并解关于 $n$ 的一元二次方程即可。 代码如下: ```cpp #include<bits/stdc++.h> using namespace std; int main(){ int z,x,y; cin>>z; int p=0,q=z; while(q%2==0) q/=2,p++; if(p%2==1) cout<<"No Answer"; else{ for(int i=ceil(-(2.0*sqrt(3*q))/3.0);i<=int(2.0*sqrt(3*q)/3.0);i++){ int m=i; int a=1,b=m,c=m*m-q; int delta=b*b-4*a*c; if(delta<0||sqrt(delta)*sqrt(delta)!=delta) continue; int n=INT_MAX; if(int(-b-sqrt(delta))%2==0) n=min(int(-b-sqrt(delta))/2,n); else if(int(-b+sqrt(delta))%2==0) n=min(int(-b+sqrt(delta))/2,n); else continue; x=m*pow(2,p/2),y=n*pow(2,p/2); cout<<x<<" "<<y; return 0; } cout<<"No Answer"; } return 0; } ```
Loading...
点赞
1
收藏
0