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);				
	}

}


發佈了322 篇原創文章 · 獲贊 15 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章