杭电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();
}
}
}