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 ...
随机推荐
- SharePoint 2010 设置宽度1024px
在模板页中找到 s4-workspace,设置class=”s4-nosetwidth“,然后再设置宽度为1024px:如果要居中,设置style=“margin:0 auto” 这样也会有一个问题: ...
- Android编程: ViewPager和Dialogs组件
学习内容:ViewPager和Dialogs组件 ====ViewPager组件==== 它的作用主要是支持屏幕左右滑动切换列表元素,使用方式如下: 1.首先定义ID号信息,创建res/values/ ...
- 3-附1 ->和*的区别
问题: c++ .和 ->有什么区别? 还有什么是继承什么是派生?-------------------------------------------------------------- 比 ...
- 89C51单片机实现的流水灯
/*******************************************Copyright: 2014.02.09.version1.0File name: led.cDescrip ...
- mssql 动态添加数据库用户
USE [master]GOCREATE LOGIN [admin] WITH PASSWORD=N'123456', DEFAULT_DATABASE=[test], CHECK_EXPIRATIO ...
- < java.util >-- Iterator接口
每一个集合都有自己的数据结构,都有特定的取出自己内部元素的方式.为了便于操作所有的容器,取出元素.将容器内部的取出方式按照一个统一的规则向外提供,这个规则就是Iterator接口. 也就说,只要通过该 ...
- linux校准时间
Linux下ntpdate时间同步 Ntp服务器安装配置 ntp(Network Time Protocol)协议 RedHat服务器可以下载rpm安装包,然后执行# rpm -ivh ntp-4.2 ...
- 制作OpenStack用的RHEL7系统镜像
制作OpenStack使用的RHEL7系统镜像,并进行相关设置,安装XRDP以进行远程访问. 1.在KVM中安装RHEL7.2客户机: 2.设置网卡为dhcp并onboot=yes,使得虚拟机能自动获 ...
- Teamwork-Week3 职责划分及团队分数分配原则
本组人数:5. 一.人员职责划分 PM:1 柴泽华 PM的职责: 1)根据项目范围.质量.时间与成本的综合因素的考虑,进行项目的总体规划与阶段计划. 2)设置项目组中的各种角色, ...
- css3之圆角效果 border-radius
圆角效果 border-radius border-radius是向元素添加圆角边框. 使用方法: border-radius:10px; /* 所有角都使用半径为10px的圆角 */ border ...