ZOJ3673:1729
1729 is the natural number following 1728 and preceding 1730. It is also known as the Hardy-Ramanujan number after a famous anecdote of the British mathematician G. H. Hardy regarding
a hospital visit to the Indian mathematician Srinivasa Ramanujan. In Hardy's words:
I remember once going to see him when he was ill at Putney. I had ridden in taxi cab number 1729 and remarked that the number seemed to me rather a dull one, and that I hoped it was not an unfavorable omen. "No," he replied, "it is a very interesting
number; it is the smallest number expressible as the sum of two (positive) cubes in two different ways."
The two different ways are these: 1729 = 13 + 123 = 93 + 103
Now your task is to count how many ways a positive number can be expressible as the sum of two positive cubes in. All the numbers in this task can be expressible as the sum of two positive cubes in at least one way.
Input
There're nearly 20,000 cases. Each case is a positive integer in a single line. And all these numbers are greater than 1 and less than 264.
Output
Please refer to the sample output. For each case, you should output a line. First the number of ways n. Then followed by n pairs of integer, (ai,bi),
indicating a way the given number can be expressible as the sum of ai's cube and bi's. (ai≤ bi, and a1< a2<
...< an)
Sample Input
9
4104
2622104000
21131226514944
48988659276962496
Sample Output
1 (1,2)
2 (2,16) (9,15)
3 (600,1340) (678,1322) (1020,1160)
4 (1539,27645) (8664,27360) (11772,26916) (17176,25232)
5 (38787,365757) (107839,362753) (205292,342952) (221424,336588) (231518,331954)
Hint
Although most numbers cannot be expressible as the sum of two positive cubes, the vast majority of numbers in this task can be expressible as the sum of two positive cubes in two or more ways.
题意比較简单,就不解释了
这题还真是弄了好久,再加上犯的各种小错误,可是最终算是搞出来了,不easy啊。。。
思路:要求满足的m=a3+b3=(a+b)(a2-ab+b2)的(a,b)组合。
令t=a+b,则t一定是m的约数,所以应枚举m的全部约数。
然后能够得到
a+b=t
ab=(t2-m/t)/3=p
继而转化为a2-ta+p=0是否有正整数解就能够了。
再就是注意范围要用unsigned long long。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define ll unsigned long long
#define maxn 2642246//2^64次方的开立方
#define L 5000001
ll n;
ll prime[L],divi[500],e[500];
int len,len_prime,len_s;
bool flag[L] = {false};
struct node
{
ll x,y;
} s[1005]; int cmp(node x,node y)
{
return x.x<y.x;
} void init()//素数且不说,全部合数都能分解成随意素数之积
{
int i,j;
len_prime = 0;
for(i = 2; i<L; i++)
{
if(!flag[i]) prime[len_prime++] = i;//打下素数表
for(int j = 0; j<len_prime && i*prime[j]<L; j++)
{
flag[i*prime[j]] = true;//全部非素数排除
if(i%prime[j]==0) break;
}
}
} void find_div(ll m)//找出m的全部素因子
{
int i;
ll k;
len = 0;
for(i = 0; i<len_prime && prime[i]*prime[i]<=m; i++)
{
if(m%prime[i] == 0)
{
divi[len] = prime[i];//因子保存
k = 1;
m/=prime[i];
while(m%prime[i] == 0)//除尽为止
{
k++;//记录个数
m/=prime[i];
}
e[len++] = k;
}
}
if(m>1)
{
divi[len] = m;
e[len++] = 1;
}
} ll can_sqrt(ll c)//要求整数解,b^2-4*a*c必须能开出整数
{
ll r = sqrt(1.0*c);
if(r*r == c) return r;
return L;
} int judge(ll x,ll y)//看这组解是否已经存在
{
for(int i=0; i<len_s; i++)
if(s[i].x==x&&s[i].y==y)
return 1;
return 0;
} void solve(ll t)//找出解
{
ll x1,x2;
ll k = n/t;
ll r = t*t-k;
if(r>0 && r%3!=0) return ;
r/=3;
ll dis = t*t-4*r;
if(dis<0) return ;
ll c = can_sqrt(dis);
if(c == L) return;
if((t+c)%2 == 0)
{
x1 = (t+c)/2;
x2 = t-x1;
if(x1>x2) swap(x1,x2);
if(x1>0&&x1<t&&x1<maxn&&x2<maxn&&x2>0&&x2<t&&!judge(x1,x2))
{
s[len_s].x=x1;
s[len_s++].y=x2;
}
}
if((t-c)>0 && (t-c)%2 == 0)
{
x1 = (t-c)/2;
x2 = t-x1;
if(x1>x2) swap(x1,x2);
if(x1>0&&x1<t&&x1<maxn&&x2<maxn&&x2>0&&x2<t&&!judge(x1,x2))
{
s[len_s].x=x1;
s[len_s++].y=x2;
}
}
} ll ppow(ll a,ll b)
{
ll ans = 1;
while(b)
{
if(b&1) ans*=a;
b>>=1;
a*=a;
}
return ans;
} void dfs(int m,ll sum)
{
solve(sum);
if(m>=len) return ;
for(int i = 0; i<=e[m]; i++)//由个数去枚举次方,1为a,2为a^2,3为a^3,如此类推,枚举全部t
dfs(m+1,sum*ppow(divi[m],i));
} int main()
{
init();
while(~scanf("%llu",&n))
{
find_div(n);
len_s = 0;
dfs(0,1);
sort(s,s+len_s,cmp);
printf("%d",len_s);
for(int i = 0; i<len_s; i++)
printf(" (%llu,%llu)",s[i].x,s[i].y);
printf("\n");
} return 0;
}
ZOJ3673:1729的更多相关文章
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- BZOJ 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3628 Solved: 2052[Submit][Sta ...
- zoj 3673 1729
1729 Time Limit: 3 Seconds Memory Limit: 65536 KB 1729 is the natural number following 1728 and ...
- bzoj 3223/tyvj 1729 文艺平衡树 splay tree
原题链接:http://www.tyvj.cn/p/1729 这道题以前用c语言写的splay tree水过了.. 现在接触了c++重写一遍... 只涉及区间翻转,由于没有删除操作故不带垃圾回收,具体 ...
- hdoj 1729 Stone Games(SG函数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1729 看了题目感觉像Nim,但是有范围限制,有点不知道SG函数该怎么写 看了题解,最后才明白该怎么去理 ...
- bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2202 Solved: 1226[Submit][Sta ...
- BZOJ 3223: Tyvj 1729 文艺平衡树(splay)
速度居然进前十了...第八... splay, 区间翻转,用一个类似线段树的lazy标记表示是否翻转 ------------------------------------------------- ...
- 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1347 Solved: 724[Submit][Stat ...
随机推荐
- High-Speed Tracking with Kernelized Correlation Filters(二)
首先看看get_features函数. 首先判断是hog特征还是gray,分两种情况. 如果是hog特征,调用fhog函数,返回x,并将矩阵 ...
- Javascript之对象的创建
面向对象语言有一个非常显著的标志,那就是它们都有类的概念,通过类之间的继承就可以达到任意创建具有相同属性方法的对象.而在ECMAScript中并没有类的概念,它把对象定义为:无序属性的集合,其属性包含 ...
- jupyter(ipython notebook) 安装和入门教程
近期大家无论是自己做数据分析还是紧急答辩做PPT,可能都需要画一些数据的展示图:以前大家都是用excel画图,但excel画图存在一定的局限性,比如你要画个累积直方图,excel就很麻烦了,所以给大家 ...
- Failed to create the Java Virtual Machine
启动Zend Studio时出现Failed to create the Java VIrtual Machine 解决办法如下.打开安装目录下的ZendStudio.ini配置文件,作如下修改: 说 ...
- hdu 3389 阶梯博弈
题意:1-N带编号的盒子,当编号满足A>B && A非空 && (A + B) % 3 == 0 && (A + B) % 2 == 1则可以从A ...
- centos7.3 chrome 安装
/etc/yum.repos.d/目录下新建文件google-chrome.repo,向其中添加如下内容: [google-chrome] name=google-chrome baseurl=htt ...
- spring配置文件头部配置解析(applicationContext.xml)
分享一个好的学习网站:http://how2j.cn?p=4509 相信大家对spring的配置文件应该都看的很多了,那么大家对配置文件头部的那一坨坨的东西到底是什么了解吗?下面我就把自己的一些见解和 ...
- 用 Java 实现一个插入排序算法
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法:插入排序法.插入排序的基本操作就是将一个数据插入到已经排好序的有序 ...
- URLconf+MTV:Django眼中的MVC
MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器).其中: M 管理应用程序的状态(通常存储 ...
- 使用GNU工具链进行嵌入式裸机开发
Embedded-Programming-with-the-GNU-Toolchain Vijay Kumar B. vijaykumar@bravegnu.org 翻译整理:thammer gith ...