我刚学java几天,想用java编一个程序用来求101到225之间共有多少个素数,并把它们都显示出来,但运行程序的结果却出乎我意料,下面是我的程序:
class PrimeNumber
{
public static void main(String[] args)
{
Opera o=new Opera();
o.Output();
}
}class Opera
{
static int flag=0;
Opera()
{
for(int i=101;i<122;i++)
{
int k=(int)(Math.sqrt(i)+1);
for(int n=2;n<k;n++)
{
while(n==(int)(Math.sqrt(i)))
{
if(i%n!=0)
{
flag++;
System.out.println(i);
break;
}
}
if(i%n==0)
{
break;
}
}
}
}
void Output()
{
System.out.println("一共有素数"+flag+"个");
}
}下面是运行结果:
101
103
107
109
113
然后cmd窗口就没反应了,一看windows任务管理器 cpu占用率100%,大家谁能帮我看看这个程序到底哪里错了啊???其实开始是时候我是求101到200之间的素数的,但也出现了这样的问题,我以为是运算不过来呢,就把200改为110,一试,真好使,但我把数设置为123就不行了,不知道为什么!!
class PrimeNumber
{
public static void main(String[] args)
{
Opera o=new Opera();
o.Output();
}
}class Opera
{
static int flag=0;
Opera()
{
for(int i=101;i<122;i++)
{
int k=(int)(Math.sqrt(i)+1);
for(int n=2;n<k;n++)
{
while(n==(int)(Math.sqrt(i)))
{
if(i%n!=0)
{
flag++;
System.out.println(i);
break;
}
}
if(i%n==0)
{
break;
}
}
}
}
void Output()
{
System.out.println("一共有素数"+flag+"个");
}
}下面是运行结果:
101
103
107
109
113
然后cmd窗口就没反应了,一看windows任务管理器 cpu占用率100%,大家谁能帮我看看这个程序到底哪里错了啊???其实开始是时候我是求101到200之间的素数的,但也出现了这样的问题,我以为是运算不过来呢,就把200改为110,一试,真好使,但我把数设置为123就不行了,不知道为什么!!
{
public static void main(String[] args)
{
Opera o = new Opera();
o.Output();
}
}class Opera
{
static int flag = 0;
Opera()
{
for (int i = 101; i < 226; i++)
{
int k = (int) (Math.sqrt(i) + 1);
for (int n = 2; n < k; n++)
{
if (i % n == 0)
break;
if (n == k - 1)
{
System.out.print(i + "\t");
flag++;
if (flag % 10 == 0)
System.out.println();
}
}
}
} void Output()
{
System.out.println("一共有素数" + flag + "个");
}
}
101 103 107 109 113 127 131 137 139 149
151 157 163 167 173 179 181 191 193 197
199 211 223 一共有素数23个
public static void main(String[] args) {
int begin = 101;
int end = 225;
int total = new Test().statisticPrime(begin, end);
System.out.println("从[" + begin + "]到["+end+"]共有[" + total + "]个素数.");
}
public int statisticPrime(int begin,int end){
int total = 0;
for (int i = begin; i < end; i ++){
if (isPrime(i)){
total ++;
System.out.println(i);
}
}
return total;
}
private boolean isPrime(int num){
if (num <= 2){
if (num == 2){
return true;
}
return false;
}
if (num%2 == 0){
return false;
}
for (int i = 3; i < (int)Math.sqrt(num); i ++){
if (num % i == 0){
return false;
}
}
return true;
}
}供参考~~~~
public static void main(String[] args) {
int begin = 101;
int end = 225;
int total = new Test().statisticPrime(begin, end);
System.out.println("从[" + begin + "]到["+end+"]共有[" + total + "]个素数.");
}
public int statisticPrime(int begin,int end){
int total = 0;
for (int i = begin; i < end; i ++){
if (isPrime(i)){
total ++;
System.out.println(i);
}
}
return total;
}
private boolean isPrime(int num){
if (num <= 2){
if (num == 2){
return true;
}
return false;
}
if (num%2 == 0){
return false;
}
for (int i = 3; i <= (int)Math.sqrt(num); i ++){
if (num % i == 0){
return false;
}
}
return true;
}
}供参考~~~~
就是下面这段:while(n==(int)(Math.sqrt(i)))
{
if(i%n!=0)
{
flag++;
System.out.println(i);
break;
}
}
if(n==k-1)
{
if(i%n!=0)
{
flag++;
System.out.println(i);
break;
}
}