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 a1a2<
...< 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的更多相关文章

  1. [BZOJ3223]Tyvj 1729 文艺平衡树

    [BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...

  2. BZOJ3223: Tyvj 1729 文艺平衡树 [splay]

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3595  Solved: 2029[Submit][Sta ...

  3. BZOJ 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 2052[Submit][Sta ...

  4. zoj 3673 1729

    1729 Time Limit: 3 Seconds      Memory Limit: 65536 KB 1729 is the natural number following 1728 and ...

  5. bzoj 3223/tyvj 1729 文艺平衡树 splay tree

    原题链接:http://www.tyvj.cn/p/1729 这道题以前用c语言写的splay tree水过了.. 现在接触了c++重写一遍... 只涉及区间翻转,由于没有删除操作故不带垃圾回收,具体 ...

  6. hdoj 1729 Stone Games(SG函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1729 看了题目感觉像Nim,但是有范围限制,有点不知道SG函数该怎么写 看了题解,最后才明白该怎么去理 ...

  7. bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2202  Solved: 1226[Submit][Sta ...

  8. BZOJ 3223: Tyvj 1729 文艺平衡树(splay)

    速度居然进前十了...第八... splay, 区间翻转,用一个类似线段树的lazy标记表示是否翻转 ------------------------------------------------- ...

  9. 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1347  Solved: 724[Submit][Stat ...

随机推荐

  1. git clone命令使用

    git clone命令使用 分类: 项目构建2013-06-26 15:43 38660人阅读 评论(2) 收藏 举报 GitClone git clone 命令参数: usage: git clon ...

  2. 洛谷P1491集合位置

    传送门啦 这个题说白了就是求一个次短路. 方法是我们先跑一遍最短路,记录下最短路上每一个点的前驱.然后我们将最短路上每一条边都标记一次,分别跑一边最短路,求出最短路径即可. 在这我们不用特殊判断是否是 ...

  3. GreenPlum学习笔记:date_part与extract提取日期时间、时间差

    GP可以使用date_part / extract从日期时间类型中抽取部分内容. 方法一:extract 格式:extract(field from source)  extract函数从日期.时间数 ...

  4. Pyhton核心编程-Chap2习题-DIY

    在学Python,在看<Python核心编程>的pdf,做了Chap2的题目,答案为DIY # Filename: 2-11.py # Author: ChrisZZ mylist = [ ...

  5. 一步一步学习IdentityServer3 (11) OAuth2

    OAuth中定义了四个Role 资源所有者:这里可以理解为一个用户 资源服务器:如同前面章节中的 Web站点或者WebApi 服务资源站点 客户端:这里是Client,如同Identityserver ...

  6. Spark(十五)SparkCore的源码解读

    一.启动脚本分析 独立部署模式下,主要由master和slaves组成,master可以利用zk实现高可用性,其driver,work,app等信息可以持久化到zk上:slaves由一台至多台主机构成 ...

  7. Opencv算法运行时间

    使用getTickCount() 需要导入命名空间cv,using namespace cv; double t = getTickCount(); funciont(); double tm = ( ...

  8. python学习day4之路文件的序列化和反序列化

    json和pickle序列化和反序列化 json是用来实现不同程序之间的文件交互,由于不同程序之间需要进行文件信息交互,由于用python写的代码可能要与其他语言写的代码进行数据传输,json支持所有 ...

  9. AlexNet的参数优化

    优化算法的参数 论文中使用SGD算法,基本参数设置在前面优化算法的总结中已经提到了.这里要说几个个人体会. a. 原文中输入的batch数目是256,应该Alex经过调节后的结果,我实际用到的机器性能 ...

  10. 采用Post请求的方式提交参数并导出excel

    一般情况下,我们都是采用get请求的方式导出excel.例如采用如下方式: var exportUrl = '/xxx;'; window.open(exportUrl); 导出excel所需的逻辑参 ...