题目:将自己的学号加100,例如学号为5,则值为105。对所加得的值,求所有的素数之和。
要求:
1、用图形界面
2、在图形界面上打印出所有的素数
3、用一个文本框显示所有的素数和
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class zhang extends Applet implements ActionListener
{
Label result;
TextField input;
Button btn;
int n=0; public void init()
{
result=new Label("请输入你的学号加100的值:");
input=new TextField(10);
btn=new Button("计算");
add(result);
add(input);
add(btn);
btn.addActionListener(this);
}public void actionPerformed(ActionEvent e)
{
n=Integer.parseInt(input.getText());
int k=1;
boolean zw;
for (int j=2;j<n;j++)
{
zw=true;
for(int i=2;i<j;i++)
{
if((j%i)==0)
{
zw=false;
break;
}
k+=j;
}
}
result.setText("所有素数之和为:"+k);
}
}
要求:
1、用图形界面
2、在图形界面上打印出所有的素数
3、用一个文本框显示所有的素数和
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class zhang extends Applet implements ActionListener
{
Label result;
TextField input;
Button btn;
int n=0; public void init()
{
result=new Label("请输入你的学号加100的值:");
input=new TextField(10);
btn=new Button("计算");
add(result);
add(input);
add(btn);
btn.addActionListener(this);
}public void actionPerformed(ActionEvent e)
{
n=Integer.parseInt(input.getText());
int k=1;
boolean zw;
for (int j=2;j<n;j++)
{
zw=true;
for(int i=2;i<j;i++)
{
if((j%i)==0)
{
zw=false;
break;
}
k+=j;
}
}
result.setText("所有素数之和为:"+k);
}
}
{
if((j%i)==0)
{
zw=false;
break;
}
k+=j;
}
有问题 假如此时j = 9, i = 2, 是不是要执行 k+=j 呀
改为
public void actionPerformed(ActionEvent e)
{
n=Integer.parseInt(input.getText());
int k=2;
flag:for(int i=3;i<=n;i+=2)
{
for(int j=2;j<=Math.sqrt(i);j++)
{
if(i%j==0)
continue flag;
}
k+=i;
}
result.setText("所有素数之和为:"+k);
}
昨晚上我想了好久已经弄好了,现在我发出来,请高手帮我分析一下哪里还需要进步的地方。import java.applet.*;
import java.awt.*;
import java.awt.event.*;public class fuhao extends Applet implements ActionListener
{
Label result;
TextField input;
Button btn;
int n=0,k=0;
int a[]=new int[100];
public void init()
{
result=new Label("请输入你的学号加100后的值:");
btn=new Button("计算");
input=new TextField(5);
add(result);
add(input);
add(btn);
btn.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
n=Integer.parseInt(input.getText());
int b=1;
boolean issh;
for (int j=3;j<=n;j++)
{
issh=true;
for(int i=2;i<j;i++)
{
if((j%i)==0)
{
issh=false;
break;
}
}
if(issh==true)
a[k++]=j;
}
for(int m=0;m<k;m++)
b+=a[m];
result.setText("素数之和为:"+b);
}
public void paint(Graphics g){
g.drawString("所有素数为:",250,200 );
for(int i=0;i<k;i++)
g.drawString(Integer.toString(a[i]),300,210+i*10);
}
}
for (int j=3;j<=n;j++)
{
要改改不然太慢了
j++改为
j+=2
这样大于3的所有偶数都可以跳过去了。
for(int i=2;i<j;i++)
{
也要改
因为我们跳过了所有的偶数
i可以从3开始
i++同样也要该为 i+=2
我估计改这两个地方应该可以提高4倍以上的速度
你找个大点的数试试吧,别忘了把结果告诉我啊
if(issh==true)
a[k++]=j;
}
for(int m=0;m<k;m++)
b+=a[m];
是否有些画蛇添足?
原来的
类似 k+=j;的方法怎么拉?
k+=i;
刚才我跟我同学正在讨论这个程序,就是在运行的时候打印所有素数的时候速度太慢了。
进来正好看到老兄的指点,谢谢了,程序速度提高了很多。
特此感谢windcao(风间草)。不过我这道题最多奖励20分。
我给你15分吧,还是谢谢你了。
真得很感谢。