java 输出1-100素数
publicclassdata3{publicstaticvoidmain(String[]args){System.out.println("1-100内的素数为:\n...
public class data3 {
public static void main(String[] args){
System.out.println("1-100内的素数为:\n");
int number1=1;
while (number1<=100){
int number3=0;
for(int number2=1;number2<=number1;number2++){
if (number2%number1==0)
number3++;
}
if((number3==1)||(number3==2));
{
System.out.println(number1);
}
number1++;
}
}
}
我编出来,为什么会1到100全部输出了? 展开
public static void main(String[] args){
System.out.println("1-100内的素数为:\n");
int number1=1;
while (number1<=100){
int number3=0;
for(int number2=1;number2<=number1;number2++){
if (number2%number1==0)
number3++;
}
if((number3==1)||(number3==2));
{
System.out.println(number1);
}
number1++;
}
}
}
我编出来,为什么会1到100全部输出了? 展开
5个回答
展开全部
你那个写的有点乱,代码可以写成下面这个样子,这个问题的关键就是怎样让代码的时间复杂度越低,即性能越好。素数的特征就是只能被1和他自己整除。我们可以以这个为出发点,控制循环条件,你可以看看我代码,不懂的还可以问,希望能够帮助你,谢谢
public static void main(String args[]) {
System.out.println("1-100内的素数为:\n");
int number = 1;
boolean isSuShu = true;
while(number<=100) {
for (int begin=1; begin<=number ; begin++) {
if (number%begin ==0 && begin != 1 && begin != number) {
isSuShu=false;//只要这个数能被1和他本身其他的数除尽的话,他就不是素数
break;
}
}
if (isSuShu) {
System.out.println("素数:" + number);
}
number++;
isSuShu = true;//每次循环完都要重新给这个标志位赋值
}
}
public static void main(String args[]) {
System.out.println("1-100内的素数为:\n");
int number = 1;
boolean isSuShu = true;
while(number<=100) {
for (int begin=1; begin<=number ; begin++) {
if (number%begin ==0 && begin != 1 && begin != number) {
isSuShu=false;//只要这个数能被1和他本身其他的数除尽的话,他就不是素数
break;
}
}
if (isSuShu) {
System.out.println("素数:" + number);
}
number++;
isSuShu = true;//每次循环完都要重新给这个标志位赋值
}
}
展开全部
因为number2迟早为1,1 %任何数都为1,所以number++永远执行
按照你的方法,我修改你的
public class data3 {
public static void main(String[] args) {
int number1 = 1;
while (number1 <= 100) {
int number3 = 0;
for(int i = 2; i < Math.sqrt(number1); i++){
if(number1 % i == 0){
number3++;
break;
}
}
if (number3 == 0) {
System.out.println(number1);
}
number1++;
}
}
}
按照你的方法,我修改你的
public class data3 {
public static void main(String[] args) {
int number1 = 1;
while (number1 <= 100) {
int number3 = 0;
for(int i = 2; i < Math.sqrt(number1); i++){
if(number1 % i == 0){
number3++;
break;
}
}
if (number3 == 0) {
System.out.println(number1);
}
number1++;
}
}
}
追问
没看懂,你可以帮我改一下吗?
谢谢。
追答
已经修改了,其实对于数字number1,你不用判断到number-1得,只用判断到它的平方根就可以了。这样速度快。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你程序是什么意思,if (number2%number1==0)你number2<=number1 取余只有一种情况(number2==number)等于0啊,你说结果是不是所有数都输出了呢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public class Test02 {
public static void main(String[] args){
System.out.println("1-100内的素数为:\n");
sushu();
}
static void sushu(){
int num=1;
while(num<=100)
{
int num2=0;
for (int i = 1; i <= 100; i++) {
if(num%i==0)
{
num2++;
}
}
if(num2==2)
{
System.out.println(num);
}
num++;
}
}
public static void main(String[] args){
System.out.println("1-100内的素数为:\n");
sushu();
}
static void sushu(){
int num=1;
while(num<=100)
{
int num2=0;
for (int i = 1; i <= 100; i++) {
if(num%i==0)
{
num2++;
}
}
if(num2==2)
{
System.out.println(num);
}
num++;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
逻辑判断错误!
boolean[] flagother= new boolean[20000];
int p,w;
int n=2;
for(p=0;p<20000;p++){
flagother[p]=true;
}
for (int q=2;q<=Math.sqrt(p);q++){
if (flagother[q]) {
for(int j=q;q*j<20000;j++){
flagother[q*j] = false;
n = n+1;
System.out.print(q);
}
}
}
boolean[] flagother= new boolean[20000];
int p,w;
int n=2;
for(p=0;p<20000;p++){
flagother[p]=true;
}
for (int q=2;q<=Math.sqrt(p);q++){
if (flagother[q]) {
for(int j=q;q*j<20000;j++){
flagother[q*j] = false;
n = n+1;
System.out.print(q);
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询