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 ...
随机推荐
- HDU 3360 National Treasures(最小点覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3360 题目大意: 在一个n*m的格子中,每个格子有一个数值,-1表示空,其余表示财宝.每个财宝的数值转 ...
- Centos之帮助命令
帮助命令man (manual) 比如我们可以看下man命令的解释 [root@localhost ~]# man man MAN(1) ...
- poj 3270(置换群+贪心)
Cow Sorting Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6993 Accepted: 2754 Descr ...
- Icon.png pngcrush caught libpng error:Read
[问题处理]Icon.png pngcrush caught libpng error:Read Error 遇到问题 在项目Archive时,遇到 Icon.png pngcrush caught ...
- Chrome+XX_Net的上网渠道
本页面将详细演示如何在一台全新的Windows7电脑上架设起Chrome+XX_Net的上网渠道. 本文包含以下部分: 下载和安装Chrome浏览器 获取和运行XX-Net 设置代理 手动导入证书(备 ...
- django使用RestFramework的Token认证
今天实现的想法有点不正规: Django Rest framework的框架的认证,API都运行良好. 现在是要自己写一个function来实现用户的功能. 而不是用Rest 框架里的APIVIEW这 ...
- pomelo 安装
1. 安装nodejs ,python ,C++运行环境(VS2012以上版本) 2.npm install -g node-gyp --registry=https://registry.npm.t ...
- MySQL性能优化之char、varchar、text的区别
参考来源:https://blog.csdn.net/brycegao321/article/details/78038272 在存储字符串时, 可以使用char.varchar或者text类型, 那 ...
- DNS 设置
用上 ip 靓号1.1.1.1,Cloudflare 花了多少钱? ipv4: 1.1.1.1 和 1.0.0.1 是目前最快的 DNS. 通过ipv6***之二--使用IPv6 DNS服务器
- odoo基础数据加载
odoo 基础数据加载 这里介绍的odoo基础数据加载分两种方式,一种是演示数据加载,一种是默认数据加载,下面就是详细介绍 首先,当然是创建一个date文件夹 项目目录,右键自定义一个文件夹 XML数 ...