先来看傻逼的做法:
稍微化下式子。

x2+3y2=n23y2=(n+x)(n−x)

x^2+3y^2=n^2\\ 3y^2=(n+x)(n-x)
令 g=(n+x,n−x)g=(n+x,n-x),则有 n+x=ga2,n−x=g3b2n+x=ga^2,n-x=g3b^2或 n+x=g3b2,n−x=ga2(a,b∈Z)n+x=g3b^2,n-x=ga^2(a,b \in Z).
所以有 2n=g(a2+3b2)2n=g(a^2+3b^2),那么显然有g|2n。所以我们先枚举g,然后再枚举 3b23b^2,判断 n−3b2n-3b^2是否是一个完全平方数。但是有一个很蛋疼的地方是 a2a^2与 3b23b^2要互质。如果用gcd来判互质的话。。感觉有点慢。
但是注意到我们为什么要求它们互质呢?因为如果不互质的话,就可以被提到g中去,这样就会计算多次了。那么我们就干脆让g不含平方因子就可以了。因为如果g含有平方因子,那么它就可以被放到外面来,成为一个在g不含平方因子而 a2,3b2a^2,3b^2不互质的情况。
这样的话最多有11个质因子,就需要枚举 2112^{11}个g,然后每次花费 n√\sqrt n的代价判断。但是这个 n√\sqrt n在枚举的过程中其实下降的很快,因为要除约数嘛。
实际测试,最坏情况要跑1.6s左右,一个点时限3s的话是可以搞定的。

膜拜大爷的做法:
打表可以发现,其实答案/2(去掉对称的情况)后是一个积性函数。

f(pk)=⎧⎩⎨⎪⎪212k+1,p=2,p≡5mod6,p≡1mod6

f(p^k)=\left\{ \begin{aligned} 2 & ,p=2 \\ 1 & ,p ≡ 5 \bmod 6\\ 2k+1 & ,p≡1 \bmod 6 \end{aligned} \right.
(不知道这么神的规律是怎么找出来的orz。。)

代码:

#include<cstdio>
#include<iostream>
using namespace std;
#include<cstring>
#include<cmath>
#include<algorithm>
typedef long long LL;
const int T=10+5;
const LL N=1e12+5;const int R=1e6+10;
int prime[R];
bool p[R+5];const int Log=12;
LL dvs[Log];bool check(LL x){//printf("check(%I64d)=%d\n",x,(LL)pow((int)sqrt(x),2)==x);return (LL)pow((int)sqrt(x),2)==x;
}
LL query(LL n){//printf("query(%I64d)\n",n);int ans=0;for(LL i=1;3*i*i<n;++i)ans+=check(n-3*i*i);//printf("ans=%d\n",ans);return ans;
}
int main(){freopen("bzoj_4544.in","r",stdin);//freopen("bzoj_4544.out","w",stdout);for(int i=2;i<=R;++i){if(!p[i])prime[++prime[0]]=i;for(int j=1;j<=prime[0]&&i*prime[j]<=R;++j){p[i*prime[j]]=1;if(i%prime[j]==0)break;}}int t;scanf("%d",&t);int dtot;LL n,tmp,prod;LL ans;while(t--){cin>>n;n<<=1;dtot=0;tmp=n;for(int i=1;(LL)prime[i]*prime[i]<=tmp;++i)if(tmp%prime[i]==0){if(prime[i]!=3)dvs[dtot++]=prime[i];while(tmp%prime[i]==0)tmp/=prime[i];}if(tmp!=1&&tmp!=3)dvs[dtot++]=tmp;ans=0;for(int i=1<<dtot;i--;){prod=1;for(int j=dtot;j--;)if(i>>j&1)prod*=dvs[j];ans+=query(n/prod);}cout<<((ans<<1|1)<<1)<<endl;}
}

总结:
①开变量之前注意想好它的范围(有没有爆int)。
②对于那种只有一个输入的题,如果实在不会做了,可以找规律嘛!

[bzoj4544]椭圆上的整点 解题报告相关推荐

  1. bzoj4544: 椭圆上的整点

    链接 http://www.lydsy.com/JudgeOnline/problem.php?id=4544 题解 "我真傻,真的,"wyw抬起没有神采的眼睛,接着说." ...

  2. BZOJ 4544: 椭圆上的整点

    Sol 数学. 跟圆上的整点一样...TA写了个积性函数的算法...以后再说吧... \(x^2+3y^2=r^2\) \(3y^2=r^2-x^2\) \(3y^2=(r-x)(r+x)\) \(y ...

  3. 洛谷 P2336 [SCOI2012]喵星球上的点名 解题报告

    P2336 [SCOI2012]喵星球上的点名 题目描述 a180285 幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有 \(N\) 个喵星人,每个喵星人的 ...

  4. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  5. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  6. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  7. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  8. 解题报告(十三)中国剩余定理(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  9. 解题报告(四)生成函数(ACM/ OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

最新文章

  1. Error: Could not access the Package Manager. Is the system running?
  2. 塔菲尔曲线斜率的大小_分段函数函数值(自变量)大小(范围)的六种题型
  3. 微型计算机在现代通信中的应用,计算机基础单元试卷
  4. java 妖魔道-倩女幽魂_《倩女幽魂I-妖魔道》地图新手功略
  5. LeetCode 439. 三元表达式解析器
  6. Qt笔记-Linux程序控制台启动界面实例
  7. 代码重用_WebAssembly的速度和代码重用
  8. oracle .net 中文,asp.net查出 oracle数据库中的中文乱码问题
  9. Torch7框架学习资料整理
  10. 【图像处理】高斯模糊、高斯函数、高斯核、高斯卷积操作
  11. Micro LED 巨量转移技术
  12. 读书——别做正常的傻瓜
  13. QT 任务栏图标显示问题
  14. 微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克、炮弹爆炸
  15. Android读书笔记(一)
  16. [java] POI shiftRows 移动后合并的单元格被拆分了
  17. IBM 3250 m5重装linux,IBM/Lenovo System x3650 M5 系统全新安装教程
  18. Design Compiler - DC综合的流程(三)
  19. 1 大奇迹 - 遥感 - 改变世界的技术
  20. 《浅析招聘求职新渠道和传统网络招聘 》

热门文章

  1. 网络协议 -- ARP和RARP协议
  2. 出现脑裂的原因及解决方案
  3. VBA破解Excel表格保护密码
  4. ubuntu下制作.c模板
  5. 加油(c++程序猿)
  6. 【Prometheus】Prometheus 远端存储
  7. mysql多条新增字段sql合并为一条新增
  8. 【矩阵论】5. 线性空间与线性变换——生成子空间
  9. STM32 SPI+DMA 驱动 SRAM LY68L6400SLIT 应用笔记
  10. ResNet的改进系列:ResNext和Res2Net