【BZOJ4544】椭圆上的整点 数学
2016-05-16 21:43
465 查看
圆上的整点那道题稍稍修改一下就好了。。。不过听说有很神奇的积性函数做法%%%
#全程LL慢如狗系列
#全程LL慢如狗系列
/************************************************************** Problem: 4544 User: RicardoWang Language: C++ Result: Accepted Time:28488 ms Memory:24712 kb ****************************************************************/ #include<cstdlib> #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include<vector> using namespace std; long long R,A[3000005],ans; long long Find(long long x) { int id=lower_bound(A+1,A+1+3000000,x)-A; if(A[id]==x)return id; else return 0; } long long GCD(long long x,long long y) { long long t; while(y) { t=x%y; x=y; y=t; } return x; } void run(long long n) { long long sb,b; for(long long a=1;A[a]*3<n;a++) { sb=n-3*A[a]; if(b=Find(sb)) { if(A[a]*3>A[b] && GCD(3*a,b)==1) { ans++; } } } for(long long a=1;A[a]<n;a++) { sb=n-A[a]; if(sb%3==0 && (b=Find(sb/3)) ) { if(A[a]>3*A[b] && GCD(a,b*3)==1) { ans++; } } } return ; } int main() { //freopen("in.txt","r",stdin); int T; for(long long i=1;i<=3000000;i++)A[i]=i*i; scanf("%d",&T); while(T--){ cin>>R; R=R*2; ans=0; for(long long d=1;d*d<=R;d++)if(R%d==0) { run(d); if(d*d!=R) run(R/d); } ans=ans*4+2; if((R/2)*(R/2)%3==0 && Find((R/2)*(R/2)/3))ans+=2; cout<<ans<<endl; } return 0; }
相关文章推荐
- spring 数据连接泄漏
- 2016百度之星资格赛题解
- (整理)SQLServer 大数据的插入与查询
- linux中的svn命令使用
- Spark-再接着上次的Lamda架构
- poj之旅——2385
- mjpg-streamer移植
- php单例模式
- jquery
- Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期
- python中模拟进行ssh命令的执行
- LeetCode Single Number II
- spring数据连接泄漏
- python中模拟进行ssh命令的执行
- ssh加密访问
- Java面向对象之继承
- Java面向对象之多态
- 深入java之java语言基础(一)
- 【BZOJ4597】【Shoi2016】随机序列 线段树
- VC隐藏console