天天看点

杭电oj2098分拆素数和&2099整除的尾数杭电oj2098分拆素数和&2099整除的尾数

杭电oj2098分拆素数和&2099整除的尾数

一、2098分拆素数和

题目描述:

Problem Description

把一个偶数拆成两个不同素数的和,有几种拆法呢?

Input

输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。

Output

对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。

Sample Input

30 26 0

Sample Output

3 2

思路:本题较简单,主要是时间复杂度的问题,提高算法运行时间。在下面的代码中,我写了Isprime函数,用来判断素数,从3开始判断,因为1、2都已知,并且每次跳2两个,提高代码效率。

代码:

import java.util.Scanner;
public class Main{
	public static boolean Isprime(int n){
		for(int i=3;i<=n/2;i+=2){
			if(n%i==0){
				return true;
			}
		}
		return false;
	}
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		while(in.hasNext()){
			int a=in.nextInt();
			if(a!=0){
				int count=0;
				int i=3;
			while(i<a/2){
				if(Isprime(i)==false){
					if(Isprime(a-i)==false)
					 count++;
				}
				i+=2;
			}
			System.out.println(count);
			}
			else{
				break;
			}
		}
		
	}
}
 
           

二、2099 整数的尾数

Problem Description 一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?   Input 输入数据有若干组,每组数据包含二个整数a,b(0<a<10000, 10<b<100),若遇到0 0则处理结束。   Output 对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没有空格。   Sample Input 200 40 1992 95 0 0   Sample Output 00 40 80 15   思路:本题其实难度不大,要注意出错的一点是输出0的时候要输出00。  

Java代码:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
	Scanner in=new Scanner(System.in);
	while(in.hasNext()) {
		int a=in.nextInt();//输入两个数
		int b=in.nextInt();
		if(a==0&&b==0)
			break;
		int flag=0;
		for(int i=0;i<100;i++) {//作为尾数添加在a的后面
			if((a*100+i)%b==0) {
				if(flag==0) {
					System.out.printf("%02d",i);
					flag=1;
				}
				else {
					System.out.print(" ");
					System.out.printf("%02d",i);
				}
			}
		}
		System.out.println();
	}
}
}