Project Euler 108:Diophantine reciprocals I 丢番图倒数I
In the following equation x, y, and n are positive integers.

For n = 4 there are exactly three distinct solutions:

What is the least value of n for which the number of distinct solutions exceeds one-thousand?
NOTE: This problem is an easier version of Problem 110; it is strongly advised that you solve this one first.
在如下方程中,x、y、n均为正整数。

对于n = 4,上述方程恰好有3个不同的解:

使得不同的解的数目超过1000的最小n值是多少?
注意:这个问题是第110题的简单版本;强烈推荐先解决这一题。
解题
这是一道很难的题目
先说暴力解法,普通暴力不行
1/x + 1/y = 1/n -> y = (n*x)/(x -n) 可以发现 只要 n*x能够整除(x-n)就是一个解了
能够找出x的范围就可以暴力解决
y = (n*x)/(x -n) 可以发现 x一定大于n,由于x y一定要是正数。
x=y=2n的时候上面等式也成了
假设x<=y 则y/x>=1 n/(x-n)>=1
2n>=x
x的取值范围就是n 到 2n
用javalong出现溢出的情况,Python好像时间很长,我用180180验证能够出来的
# coding=gbk def run():
for n in range(10,180181):
count = 0
for x in range(n+1,2*n+1):
if (n*x)%(x-n)==0:
count+=1
if count>1000:
print n if __name__ == '__main__':
run()
技巧性解题


截图于mathblog
问题就转化为求d(N) 下面就很简单了
1,如何求许多素数,筛选法求素数
2,其他根据上面的就可以直接求解了
学会分析问题很重要,根据已学到的知识,解决没有见过的问题
package Level4; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Set; public class PE0108{
public static void run(){
ArrayList<Integer> prime = getPrime(20); int n=2;
while(true){ int count = getDiophantine(n,prime);
count = (count+1)/2; if(count> 500){
System.out.println(n+"\t"+count);
if(count>1000)
break;
}
n++;
}
}
// 174720 608
// 175560 851
// 176400 563
// 177840 608
// 179520 527
// 180180 1013
public static int getDiophantine(int n,ArrayList<Integer> prime){ int count = 1;
int i=0;
for(i=0;i<prime.size();i++){
int p = prime.get(i); int exp = 1;
while(n %p ==0){
exp+=2;
n=n/p;
}
count *=exp;
if(n==1)
return count;
}
return count;
} // 求 前num个素数
public static ArrayList<Integer> getPrime(int num){
ArrayList<Integer> prime=new ArrayList<Integer>();
prime.add(2);
// 除以已经判断是素数的数
boolean isPrime = true;
for(int i=3;prime.size()<num;i++){
isPrime = true;
for(int j=0;j<prime.size();j++){
if(i%prime.get(j) ==0){
isPrime = false;
break;
}
}
if(isPrime == true){
prime.add(i);
}
}
return prime;
}
public static void run1(){
int MAX = 1000;
int n=4;
// 内存溢出使得程序运行错误
System.out.println(getCount(180180));
while(true){
int count =getCount(n); if(count >=600){
System.out.println(n+"\t"+count);
if(count>MAX)
break;
}
n++;
}
}
public static int getCount(int n){
int count =0; for(int x=n+1;x<=2*n;x++){
long nx = n*x;
System.out.println(nx);
if( nx%(x-n)==0){
count++;
}
}
return count;
} public static void main(String[] args){
long t0 = System.currentTimeMillis();
run1();
long t1 = System.currentTimeMillis();
long t = t1 - t0;
System.out.println("running time="+t/1000+"s"+t%1000+"ms");
}
}
Java Code
Project Euler 108:Diophantine reciprocals I 丢番图倒数I的更多相关文章
- Project Euler 110:Diophantine reciprocals II 丢番图倒数II
Diophantine reciprocals II In the following equation x, y, and n are positive integers. For n = 4 th ...
- bzoj 4459: [Jsoi2013]丢番图 -- 数学
4459: [Jsoi2013]丢番图 Time Limit: 10 Sec Memory Limit: 64 MB Description 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系 ...
- 【bzoj4459】[Jsoi2013]丢番图 分解质因数
题目描述 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系数不定方程的数学家之一.为了纪念他,这些方程一般被称作丢番图方程.最著名的丢番图方程之一是x^N+y^n=z^N.费马提出,对于N&g ...
- BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数
BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数 Description 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系数不定方程的数学家之一. 为了纪念他,这些方程一般被称 ...
- bzoj4459[Jsoi2013]丢番图
bzoj4459[Jsoi2013]丢番图 题意: 丢番图方程:1/x+1/y=1/n(x,y,n∈N+) ,给定n,求出关于n的丢番图方程有多少组解.n≤10^14. 题解: 通分得yn+xn=xy ...
- Project Euler 66: Diophantine equation
题目链接 思路: 连分数求佩尔方程最小特解 参考博客 模板: LL a[]; bool min_pell(LL d, LL &x, LL &y) { LL m = floor(sqrt ...
- [luogu5253]丢番图【数学】
传送门 [传送门] 题目大意 求\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n}\)有多少组不同的解. 分析 将式子转化成\((n-x)(n-y)=n^2\)的形式. 那么很 ...
- 【bzoj4459】JSOI2013丢番图
某JSOI夏令营出题人啊,naive! 你还是得学习个,搬这种原题不得被我一眼看穿? 求个n^2的约数除以二,向上取整. #include<bits/stdc++.h> using nam ...
- BZOJ 4459: [Jsoi2013]丢番图 数学推导
之前绝对做过几乎一模一样的题,现在做竟然忘了. code: #include <bits/stdc++.h> #define ll long long #define setIO(s) f ...
随机推荐
- 51.ISE中的DCM全局时钟转为普通IO
在用DCM这个IP核时,它的输入时钟为全局时钟引脚输入,输出有两种情况,第一,可以直接接在全局时钟引脚:第二,可以通过ODDR2原语接在普通IO引脚:说下第二种是怎么用的: DCM DCM_INST ...
- QT 十六进制整数变为字符串自动补0 && 十进制补零
QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0')); int a=0001; QStri ...
- 高效线程池(threadpool)的实现
高效线程池(threadpool)的实现 Nodejs编程是全异步的,这就意味着我们不必每次都阻塞等待该次操作的结果,而事件完成(就绪)时会主动回调通知我们.在网络编程中,一般都是基于Reactor线 ...
- 静态数据认证(SDA)与动态数据认证(DDA)的区别
PBOC/EMV里有两个非常重要的概念,SDA(staticdataauthentication)和DDA(dynamicdataauthentication),分别叫做静态数据认证和动态数据认证.这 ...
- javascript进行url转义方法比较escape、encodeURI和encodeURIComponent
escape会将除了 ASCII 字母.数字和特定的符号(* @ - _ + . /)以外的字符全部进行转义编码,因此如果想对URL编码,最好不要使用此方法,因为它会让你的URL变的不可读. 提示:E ...
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum 离线+线段树
题目链接: http://codeforces.com/contest/703/problem/D D. Mishka and Interesting sum time limit per test ...
- weiapi2.2 HelpPage自动生成接口说明文档和接口测试功能
在开发Webapi项目时每写完一个方法时,是不是需要添加相应的功能说明和测试案例呢?为了更简单方便的写说明接口文档和接口测试HelpPage提供了一个方便的途径. 她的大致原理是:在编译时会生成.dl ...
- 引入代码后,在@override报错
最近引入了spring的源码到工程里,发现凡是@override修饰的代码都会报错 这里有java历史的原因 5及以前不支持@override的注解,所以,此时,你最需要知道的是当前项目djk的编译版 ...
- 异步解压ZIP文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- highchart 导出图片, 显示空白
使用highchart时, 导出的图片会变空白.. 解决方案: 不要加载grid.js