JAVA 水题
纯粹是让我来掌握熟练度的。
1.金蝉素数
某古寺的一块石碑上依稀刻有一些神秘的自然数。
专家研究发现:这些数是由1,3,5,7,9 这5 个奇数字排列组成的5 位素数,且同时去掉它的最高位与最低位数字后的三位数还是素数,同时去掉它的高二位与低二位数字后的一位数还是素数。因此,人们把这些神秘的素数称为金蝉素数,喻意金蝉脱壳之后仍为美丽的金蝉。
输出所有金蝉素数。
ANSWER:
13597
53791
79531
91573
95713
package test; import java.util.Arrays; public class test { static int n = 100000; static boolean isprimer[] = new boolean[n+10]; public static void getprimer() { isprimer[0]=isprimer[1]=true; for (int i = 2; i * i <= n; i++) { if (!isprimer[i]) for (int j = i; j * i <= n; j++) { isprimer[i * j] = true; } } } public static void main(String[] args) { getprimer(); for(int i=10000;i<=99999;i++) { if(isprimer[i]) continue; int a[]=new int[10]; int x=i; for(int j=1;j<=5;j++) { a[j]=x%10; x/=10; } boolean ok=true; //数字不重复 for(int j=1;j<=5;j++) { //奇数 if(((a[j] & 1)==0) ) ok=false; for(int k=j-1;k>=1;k--) { if(a[j]==a[k]) { ok=false; break; } } if(!ok) break; } if(ok&& !isprimer[ a[4]*100+ a[3]*10+ a[2] ] && !isprimer[a[3]]) System.out.println(i); //System.out.println(i); } } }
2.回文素数
回文素数是一个既是素数又是回文数的整数。输出不超过1000的回文素数。
ANSWER:
2
3
5
7
11
101
131
151
181
191
313
353
373
383
727
757
787
797
919
929
package test; import java.util.Arrays; public class test { static int n = 100000; static boolean isprimer[] = new boolean[n+10]; public static void getprimer() { isprimer[0]=isprimer[1]=true; for (int i = 2; i * i <= n; i++) { if (!isprimer[i]) for (int j = i; j * i <= n; j++) { isprimer[i * j] = true; } } } public static int length(int x) { int len=0; while(x!=0) { len++; x/=10; } return len; } public static void main(String[] args) { getprimer(); for(int i=1;i<=1000;i++) { if(isprimer[i]) continue; int a[]=new int[10]; int x=i; int len=length(i); for(int j=1;j<=len;j++) { a[j]=x%10; x/=10; } boolean ok=true; for(int j=1;j<=len;j++) { if(a[j]!=a[len-j+1]) { ok=false; break; } } if(ok) System.out.println(i); } } }
3.1~100素数的等差数列
主要练习ArrayList
package test; import java.util.ArrayList; import java.util.Arrays; public class test { static int n = 100; static boolean isprimer[] = new boolean[n+10]; static ArrayList primers = new ArrayList(); public static void getprimer() { isprimer[0]=isprimer[1]=true; for (int i = 2; i * i <= n; i++) { if (!isprimer[i]) for (int j = i; j * i <= n; j++) { isprimer[i * j] = true; } } for(int i=2;i<=n;i++) { if(!isprimer[i]) primers.add(new Integer(i)); } //for(int i=0;i<primers.size();i++) // System.out.println(primers.get(i)); } static ArrayList getlist() { ArrayList temp=null; ArrayList ans=new ArrayList(); for(int i=0; i <primers.size();i++) { for(int j=i+1;j<primers.size();j++) { int a=((Integer)(primers.get(i))).intValue(); int b=((Integer)(primers.get(j))).intValue(); int diff=b-a; int c=b+diff; if(primers.contains(new Integer(c)))//if(!isprimer[c]) { temp=new ArrayList(); //第1~3个数加入 temp.add(new Integer(a)); temp.add(new Integer(b)); temp.add(new Integer(c)); //查找后面有没有 for(int k=c+diff;k<=n;k+=diff) { if(primers.contains(new Integer(k))) { temp.add(new Integer(k)); } else break; } ans.add(temp); } } } return ans; } public static void print(ArrayList ans) { for(int i=0;i<ans.size();i++) { ArrayList temp=(ArrayList) ans.get(i); for(int j=0;j<temp.size();j++){ System.out.print(temp.get(j) + " "); } int a=((Integer)(temp.get(1))).intValue(); int b=((Integer)(temp.get(2))).intValue(); System.out.println("diff = " +(b-a) + " "); } } public static void main(String[] args) { getprimer(); print(getlist()); } }
4.求s=a+aa+aaa+a……aa的值
其中a和len从键盘输入
如a=4 len=3
输出492
package test; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class test { public static int getnum(int a,int i) { int res=0; while((i--)!=0) { res=res+(int)Math.pow(10,i)*a; } return res; } public static void main(String[] args) { int a; int len; Scanner in=new Scanner(System.in); System.out.println("please input num a"); a=in.nextInt(); len=in.nextInt(); int sum=0; for(int i=1;i<=len;i++) { sum+=getnum(a,i); } System.out.println(sum); } }
5.埃及分数式
分子是1的分数,叫单位分数。古代埃及人在进行分数运算时。只使用分子是1的分数。因此这种分数也叫做埃及分数,或者叫单分子分数。
随便输入一个真分数,要求分解为埃及分数。
如3/7=1/3+1/11+1/231
从原来的分数中分解出一个分母为b/a+1的埃及分数。直到分子能整除分母。
package test; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class test { public static void main(String[] args) { System.out.println("please input number"); String temp=null; Scanner in=new Scanner(System.in); temp=in.next(); int index=temp.indexOf('/'); int a=Integer.parseInt(temp.substring(0,index)); int b=Integer.parseInt(temp.substring(index+1)); while(b%a!=0) { int c=b/a+1; System.out.print("1/"+c+" + "); a=a*c-b; b=b*c; } int c=b/a; System.out.println("1/"+c); } }
新 blog : www.hrwhisper.me