题目描述:
键盘输入两个整数a,b为要查找的起始和终止范围。程序输出此范围的所以素数,以及和
考察知识点:自定义函数的定义以及调用
代码:
package spoc;
import java.util.Scanner;
public class sum_prime {
//b以内素数求和
public static void isPrime(int a,int b){
int i,sum = 0;
System.out.print(b+"之内的素数有: ");
if(b>=2)
{sum=2;
System.out.print(2+" ");
}
for( i=a;i<=b;i++)
{boolean prime=true;
for(int j=2;j<i;j++)
{
if( i%j==0)
{
prime=false;//不是素数
break;
}
if(prime&&j==i-1)
{ System.out.print(i+" ");
sum=sum+i;
}
}
}
System.out.println("和为:"+sum);
}
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
System.out.println("请输入要查找素数的范围:");
int a=in.nextInt();
int b=in.nextInt();
sum_prime d=new sum_prime(); //调用函数方法:对象名.函数名
//需要实例化对象,后调用
d.isPrime(a,b);
}
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/eb8ef42a592563bf5577702639490cd3.png)
总结:
a.main函数是类里的一个方法,方法只能在类里声明,因此main要写在class类中.
b.自定义函数要写在class类中,由于public static自定义函数要与main函数要并列(同在class下)而不能嵌套.
c.若运行结果显示为上一个程序的结果,则可能是main函数出现了问题,程序在运行时找不到入口.
d.调用自定义函数。首先要创建class类对象后,在用对象.函数的方式调用.
结构例如:
public class sum_prime {
public static void isPrime(int a,int b){
//....
}
public static void main(String[] args) {
//....
sum_prime d=new sum_prime(); //需要实例化对象,后调用
d.isPrime(a,b); //调用函数方法:对象名.函数名
}
}
提高效率后,输出前50个素数:
package spoc;
public class imp_prime1 {
public static void main(String[] args) {
int[] primes=new int[50];
primes[0]=2;
int cut=1;//素数表的下标
MAIN_LOOP:
for (int x=3;cut<primes.length;x++)//x为数值
{
for(int i=0;i<cut;i++)//表未满则循环
{
if(x%primes[i]==0)
continue MAIN_LOOP;
}
primes[cut++]=x;
}
for(int k:primes)
{
System.out.print(k+" ");
}
System.out.println();
}
}
输出结果:
思路:
a.创建一个存放素数的数组primes,把2放入primes[0];
b.设置一个变量x,让数值从3开始自加,加到素数数值满为止;
3.用当前x的值依次除以素数表当前存在的元素,若相除为0则x不为素数,则跳到最开头位置,让x++;
若x为素数,则执行primes[cut++]=x;将当前元素放入素数表,将数组下标加1,为放入下一位素数做准备。放入后x加一进行下一轮循环。