Project Euler 87 :Prime power triples 素数幂三元组
Prime power triples
The smallest number expressible as the sum of a prime square, prime cube, and prime fourth power is 28. In fact, there are exactly four numbers below fifty that can be expressed in such a way:
28 = 22 + 23 + 24
33 = 32 + 23 + 24
49 = 52 + 23 + 24
47 = 22 + 33 + 24
How many numbers below fifty million can be expressed as the sum of a prime square, prime cube, and prime fourth power?
素数幂三元组
最小的可以表示为一个素数的平方,加上一个素数的立方,再加上一个素数的四次方的数是28。实际上,在小于50的数中,一共有4个数满足这一性质:
28 = 22 + 23 + 24
33 = 32 + 23 + 24
49 = 52 + 23 + 24
47 = 22 + 33 + 24
有多少个小于五千万的数,可以表示为一个素数的平方,加上一个素数的立方,再加上一个素数的四次方?
解题
先求素数,筛选法求素数,题意就是 num = a^2+b^3+c^4 num《五千万,a、b、c都是素数
可以看出,a的值最大可以是sqrt(五千万),b值得最大值是五千万的立方根,c的最大值是五千万的四次方根
所以素数的个数是:sqrt(五千万)+1
下面就直接暴力求解了
注意主要:
在求 立方 和四次放的时候可能出现越界的情况,long也不可以,所以越界的时候 结果是小于0的,大于五千万的也要考虑的
还有一个就是一个数num 可能有好几种表示的形式,也就是说有重复的情况,,,由于开始没有想到重复的情况,让我看了好久才找出问题的,,题目就是的num的个数,不是求的其分解形式个数,,,所以把符合条件的数放在集合中,最后直接集合大小就是答案了。下面java程序输出结果前一个是没有去重的,后一个是去重后的才是答案的
package Level3; import java.util.ArrayList;
import java.util.TreeSet; public class PE087{
static void run(){
int MAX = 50000000;
int limit = (int)Math.sqrt(MAX) + 1 ;
ArrayList<Integer> prime = getPrime(limit);
int count = 0;
int size = prime.size();
TreeSet<Long> set = new TreeSet<Long>();
for(int a = 0;a< size;a++){
int tmp1 = prime.get(a);
long p1 = tmp1*tmp1*tmp1*tmp1;
if(p1> MAX || p1 <0) break;
for(int b =0;b<size;b++){
int tmp2 = prime.get(b);
long p2 = tmp2*tmp2*tmp2;
if(p2> MAX || p2 <0 || p1+p2<0 || p1+p2> MAX) break;
for(int c = 0;c<size;c++){
int tmp3 = prime.get(c);
long p3 = tmp3*tmp3;
if(p3> MAX || p3 <0 || p1+p2+p3<0 || p1+p2+p3> MAX) break;
long pp = p1+p2+p3; if(pp <MAX && pp>0 && p1>0 && p2>0 && p3>0){
count++;
set.add(pp);
// if(pp<50)
// System.out.println(p1+" p2:"+p2 +" p3:"+p3+" pp:"+ pp);
}
}
}
}
System.out.println(count +"..."+set.size());
}
// 1139575...1097343
// running time=1s585ms
static boolean isPrime(int n){
if(n==2) return true;
if(n<2) return false; for(int i=2;i<=Math.sqrt(n);i++)
if(n%i==0)
return false;
return true;
}
static ArrayList<Integer> getPrime(int limit){
ArrayList<Integer> prime = new ArrayList<Integer>();
boolean isPrime = true;
prime.add(2);
for(int i=3;i<=limit;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);
// System.out.println(i);
}
} return prime;
} public static void main(String[] args){
long t0 = System.currentTimeMillis();
run();
long t1 = System.currentTimeMillis();
long t = t1 - t0;
System.out.println("running time="+t/1000+"s"+t%1000+"ms"); }
}
Python
# coding=gbk
import time as time t0 = time.time() def run():
MAX = 50000000
limit = int(MAX**0.5)
set={}
prime = getPrime(limit)
for pi in prime:
p1 = pi**4
if p1>MAX:break
for pj in prime:
p2 = pj**3
if p2>MAX:break
for pk in prime:
p3 = pk**2
if p3>MAX:break
if p1 + p2 + p3 <MAX:
set[p1+p2+p3] = 1
print len(set) #
# running time= 0.729000091553 s def getPrime(limit):
prime = [2]
isPrime = True
for i in range(2,limit):
isPrime = True
for p in prime:
if i%p==0:
isPrime = False
break
if isPrime == True:
prime.append(i)
return prime run()
t1 = time.time()
print "running time=",(t1-t0),"s"
Project Euler 87 :Prime power triples 素数幂三元组的更多相关文章
- Project Euler:Problem 87 Prime power triples
The smallest number expressible as the sum of a prime square, prime cube, and prime fourth power is ...
- project euler 16:Power digit sum
>>> sum([int(i) for i in str(2**1000)]) 1366 >>>
- Project Euler 51: Prime digit replacements
通过替换*3这样一个两位数的第一位,我们可以发现形成的九个数字有六个是质数,即13, 23,43,53,73,83.类似的,如果我们用同样的数字替换56**3这样一个五位数的第三位和第四位,会生成56 ...
- Project Euler 60: Prime pair sets
素数3, 7, 109, 673很有意思,从中任取两个素数以任意顺序拼接起来形成的仍然是素数.例如,取出7和109,7109和1097都是素数.这四个素数的和是792,是具有这样性质的四个素数的最小的 ...
- Python练习题 037:Project Euler 009:毕达哥拉斯三元组之乘积
本题来自 Project Euler 第9题:https://projecteuler.net/problem=9 # Project Euler: Problem 9: Special Pythag ...
- Python练习题 044:Project Euler 016:乘方结果各个数值之和
本题来自 Project Euler 第16题:https://projecteuler.net/problem=16 ''' Project Euler 16: Power digit sum 2* ...
- Python练习题 039:Project Euler 011:网格中4个数字的最大乘积
本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 # Project Euler: Problem 10: Largest pro ...
- Python练习题 035:Project Euler 007:第10001个素数
本题来自 Project Euler 第7题:https://projecteuler.net/problem=7 # Project Euler: Problem 7: 10001st prime ...
- Python练习题 031:Project Euler 003:最大质因数
本题来自 Project Euler 第3题:https://projecteuler.net/problem=3 # Project Euler: Problem 3: Largest prime ...
随机推荐
- css style与class之间的区别
问题描述: 网页点击[导出]按钮后,将页面table内容另存成excel文件,却发现无法保存表格样式 分析过程: 1.table表格用class,而不是style.导出时并没有导出class定义 ...
- HTML5 manifest ApplicationCache
使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. HTML5引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问 ...
- 计算 sql查询语句所花时间
--1:下面这种是SQL Server中比较简单的查询SQL语句执行时间方法,通过查询前的时间和查询后的时间差来计算的: declare @begin_date datetimedeclare @en ...
- ASP.Net网站部署失败
部署站点时候,出现如下错误 “/”应用程序中的服务器错误. ---------------------------------------------------------------------- ...
- jquery.tmpl.min.js--前端实现模版--数据绑定--详解
动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在 ...
- Ubuntu16.04.1 安装MyCat
Mycat是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的分布式数据库系统. 安装Java环境,配置全局环境变量 MyCAT是使用JAV ...
- PHP操作MongoDB简明教程(转)
转自:http://blog.sina.com.cn/s/blog_6324c2380100ux2m.html MongoDB是最近比较流行的NoSQL数据库,网络上关于PHP操作MongoDB的资料 ...
- openerp学习笔记 domain 增加扩展支持,例如支持 <field name="domain">[('type','=','get_user_ht_type()')]</field>
示例代码1,ir_action_window.read : # -*- coding: utf-8 -*-from openerp.osv import fields,osv class res_us ...
- Python脚本控制的WebDriver 常用操作 <二十七> 文件下载
测试用例场景 webdriver允许我们设置默认的文件下载路径.也就是说文件会自动下载并且存在设置的那个目录中. Python脚本 测试用Python代码: # coding=gbk ''' Crea ...
- 【转】Mac 上 java 究竟在哪里,本文彻底让你搞清楚!
这篇文章可能比较适合那些在经常在Mac下进行Java编程开发,或者经常使用Java工具的朋友.不关心Java或者不了解Java的朋友可以绕过本文哈~ 1. Mac下当你在[终端]输入java -ver ...