BZOJ 4544: 椭圆上的整点
Sol
数学.
跟圆上的整点一样...TA写了个积性函数的算法...以后再说吧...
\(x^2+3y^2=r^2\)
\(3y^2=r^2-x^2\)
\(3y^2=(r-x)(r+x)\)
\(y^2=\frac{1}{3}(r-x)(r+x)\)
\(d=(r-x)(r+x)\)
\(r-x=3du^2,r+x=dv^2\) 这里 \(r-x\) 和 \(r+x\) 并没有什么区别.
\(2r=d(3u^2+v^2)\)
枚举 \(d\) 和 \(u\)
感觉复杂度是\(O(n^{\frac{3}{4}})\)
但是可以跑最大数据的说.
Code
/**************************************************************
Problem: 4544
User: BeiYu
Language: C++
Result: Accepted
Time:8568 ms
Memory:1300 kb
****************************************************************/ #include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
#include<utility>
#include<iostream>
using namespace std; typedef long long LL;
#define debug(a) cout<<#a<<"="<<a<<" "
#define mpr(a,b) make_pair(a,b) LL T,r,n,ans; inline LL in(LL x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; } vector<pair<LL,LL> > p; LL calc(LL d){
LL res=0,m=n/d;
// cout<<"*************"<<endl;
// debug(m),debug(d);cout<<endl;
for(LL u=1,v;u*u*3<=m;u++){
v=sqrt(m-3*u*u+0.5);
// debug(u),debug(v),debug(3*v*v+u*u),cout<<endl;
// if(u>v) break;
if(v*v+u*u*3==m&&__gcd(v*v,u*u*3)==1) res++;
// cout<<"get!",debug(d*u*u*3),debug(d*v*v),debug(d*u*u*3+d*v*v)<<endl;
// p.push_back(mpr(d*u*u*3,d*v*v));
}return res;
}
int main(){
// freopen("in.in","r",stdin);
for(T=in();T--;){
r=in(),n=r<<1,ans=0;
for(LL d=1;d*d<=n;d++) if(n%d==0){
if(d*d==n) ans+=calc(d);
else ans+=calc(d)+calc(n/d);
}
cout<<ans*4+2<<endl;
// sort(p.begin(),p.end());
// for(int i=0;i<p.size();i++) cout<<p[i].first<<" "<<p[i].second<<endl;
}
return 0;
}
BZOJ 4544: 椭圆上的整点的更多相关文章
- BZOJ 1041 圆上的整点
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1041 题意:求圆x^2+y^2=r^2上的整点. 思路:由于对称性,我们只需要计算第一象 ...
- [BZOJ]1045 圆上的整点(HAOI2008)
数学题第二弹! Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数. Input 一个正整数r. Output 整点个数. Sample Input 4 ...
- bzoj 1041 圆上的整点 分类: Brush Mode 2014-11-11 20:15 80人阅读 评论(0) 收藏
这里先只考虑x,y都大于0的情况 如果x^2+y^2=r^2,则(r-x)(r+x)=y*y 令d=gcd(r-x,r+x),r-x=d*u^2,r+x=d*v^2,显然有gcd(u,v)=1且u&l ...
- BZOJ 1041 圆上的整点 数学
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1041 题目大意:求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整 ...
- BZOJ4544 椭圆上的整点(数论)
https://www.cnblogs.com/Gloid/p/9538413.html 基本思路没有太大差别.得到2n=d(a2+3b2),其中d=gcd(n-x,n+x),n-x==a2& ...
- bzoj4544 椭圆上的整点
我会所有推理..... Q1:真的这么暴力的统计答案? Q2:蜜汁统计答案.... Q3:为什么不考虑3在不同的位置的情况
- BZOJ 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3621 Solved: 1605[Submit][Sta ...
- bzoj 1041: [HAOI2008]圆上的整点 数学
1041: [HAOI2008]圆上的整点 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- bzoj 1041: [HAOI2008]圆上的整点 本原勾股數組
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 853[Submit][Stat ...
随机推荐
- easyUI validate函数【总结篇-部分转】
以下是自己总结和修改别人的帖子和资源整理出来的一些常用验证函数,备用,交流. <body>邮箱验证:<input type="text" validtype=&q ...
- 自然语言6_treebank句子解析
#英文句子结构分析 import nltkfrom nltk.corpus import treebankt = treebank.parsed_sents('wsj_0001.mrg')[1]t.d ...
- Information retrieval信息检索
https://en.wikipedia.org/wiki/Information_retrieval 信息检索 (一种信息技术) 信息检索(Information Retrieval)是指信息按一定 ...
- ubuntu下vim输入中文和中文显示
安装和配置VIM,参考 http://jingyan.baidu.com/album/046a7b3efd165bf9c27fa915.html?picindex=4 在home/你的用户名 这个 ...
- Java数据结构——队列
//================================================= // File Name : Queue_demo //-------------------- ...
- JVM 关闭钩子
1.功能 在jvm中添加关闭钩子(Runtime.getRuntime().addShutdownHook(shutdownHook);)后,当jvm关闭时会执行系统中已经设置的所有通过该方法添加的钩 ...
- Marshal
https://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx http://tomosoft.jp/design/?p=4647 ht ...
- CSS 控制Html页面高度导致抖动问题的原因
CSS 控制Html页面高度导致抖动,这类由高度导致页面抖动的问题,其实究其根本原因是滚动条是否显示导致的 在CSS中添加如下代码: html,body{ overflow-y:scroll;} ht ...
- Kindeditor 代码审计
<?php /** * KindEditor PHP * * 本PHP程序是演示程序,建议不要直接在实际项目中使用. * 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置. * */ r ...
- Redis-cluster集群【第一篇】:redis安装及redis数据类型
Redis介绍: 一.介绍 redis 是一个开源的.使用C语言编写的.支持网络交互的.可以基于内存也可以持久化的Key-Value数据库. redis的源码非常简单,只要有时间看看谭浩强的C语言,在 ...