队列应用-素数环问题
2015-12-02 11:07
363 查看
问题描述: 将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。
求解思路:
先将1放入素数环,设置一个队列,将2-n的自然数全部入队,每次对出对的一个元素k进行测试,若符合要求,则将k加入到素数环中,否则将k再次入队等待,重复次不步骤直至队列为空。
求解思路:
先将1放入素数环,设置一个队列,将2-n的自然数全部入队,每次对出对的一个元素k进行测试,若符合要求,则将k加入到素数环中,否则将k再次入队等待,重复次不步骤直至队列为空。
import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List; /** * 素数环问题 * */ public class PrimeRing { //求1-n素数环 public PrimeRing(int n){ List<Integer> ring=new ArrayList<Integer>();//用于存储素数环 ring.add(1); //将1添加到素数环中 Deque<Integer> que=new ArrayDeque<Integer>(n); //创建一个队列,FIFO //2-n全部入队 for(int i=2;i<=n;i++){ que.addLast(i); //依次入队 } int i=0; while(!que.isEmpty()){ int k=que.removeFirst(); //队首元素出队 if(isPrime(ring.get(i)+k)){ i++; ring.add(k); }else{ que.addLast(k); } } System.out.println("素数环:"+ring.toString()); } //判断一个数是否为素数 public boolean isPrime(int n){ if(n==2) return true; if(n<2 || n>2 && n%2==0) return false; int j=(int)Math.sqrt(n); //返回n的平方根 if(j%2==0) j--; while(j>2 && n%j!=0) j-=2; return j<2; } public static void main(String[] args) { PrimeRing pr=new PrimeRing(10); } }
相关文章推荐
- Android 6.0 源代码编译实践
- hbase ERROR: Can't get master address from ZooKeeper; znode data == null问题解答
- (转)一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
- NumberSpinner( 数字微调) 组件
- Kali Linux 2.0配置并安装常用的工具
- C++类禁止copy构造函数和copy assign操作符
- Linux 中卸载旧版本的JDK安装新版本JDK
- Linux环境下安装oracle
- [POJ]2533 Longest Ordered Subsequence
- Hadoop2.7.1运行wordcount
- iOS 简单实现毛玻璃效果
- 使用Apache Tiles3.x构建界面布局
- [辞2015致2016]比随笔还水的随笔
- CREATE_RECORD或者NEXT_RECORD导致 FRM-40102 错误:记录必须首先被输入或者删除
- scala List
- 发现到的优秀文字、博文、资讯等,网站地址收集列表
- Android 弹无虚发之第四弹:你应该掌握的Notification(Notification的通知栏常驻、Notification的各种样式、Notification点击无效)
- jquery判断输入密码两次是否相等
- Java 循环
- UVA 11997 - K最小的金额 (DP&转换&&优先队列) 好题