当前位置: 首页 > 知识库问答 >
问题:

Euler项目#5 Java-if语句不执行

陶成济
2023-03-14

我正在编写一个简单的算法来求解Euler项目#5,但其中一个if语句不起作用。在findNumber()方法中,更改字段变量“divisibleNum”的if语句不会更改变量的值,因此每次编译时,输出总是1。

我试着回答“能被1到25的所有数字平均整除(无余数整除)的最小正数是多少?”



public class Least
{
    private int divisibleNum;

    public Least()
    {
        divisibleNum = 1;
    }

    public static void main(String[] args)
    {
        Least lst = new Least();
        lst.findNumber();
        lst.printNumber();
    }

    public void findNumber()
    {       
        for(int i = 25; i<1; i--)
        {
            if(divisibleNum % i !=0)
                divisibleNum*= i;
        }


    }   


    public void printNumber()
    {
        System.out.println(divisibleNum);
    }
}

输出需要是可被1-25整除(包括)的最小正数,但每次只打印1。

共有1个答案

慕容雅珺
2023-03-14

所以,这实际上很有趣。不仅你的算法有缺陷,你的代码也有缺陷。你的算法总是会生成一个可以被给定数整除的数,但是只有在某些时候它才是最小的。首先,当前算法不起作用的原因是您得到了整数溢出(整数的变量不够大,无法存储该数字)。相反,您应该为此使用Long。其次,我冒昧地编写了一个新程序,它可以在100%的时间内找到通过c可以整除的最小数。它的工作原理是,如果你把每个数通过I,取该数的素因子分解,然后遍历所有的数字,对于每个素数,找到它的最大指数,就像这样,然后将所有这些相乘,得到最小的数字,可以被1到i整除。

import java.util.ArrayList;
import java.util.Arrays;
public class Least{
  private int c;
  private Long div;
  public Least(){
    c=25;
    div=1L;
  }
  public static void main(String[] args){
    Least lst = new Least();
    lst.smallestdiv();
    lst.printNumber();
  }
  public void printNumber(){
    System.out.println(c);
  }
  public int[] genPrime(int x){
    ArrayList<Integer> y = new ArrayList<Integer>();
    y.add(2);
    for(int i = 3; i < x; i++){
      boolean prime = true;
      int z = 0;
      while(z<y.size()&&y.get(z)<=sqrt(x)&&prime){
        if(isDiv(i,y.get(z))){
          prime=false;
        }
        z++;
      }
      if(prime){
        y.add(i);
      }
    }
    return IntegertoInt(y.toArray(new Integer[0]));
  }
  public boolean isDiv(int x,int y){return x%y==0;}
  public boolean isDivthrough(int x, int y){
    for(int i = 1;i<y;i++){
      if(!isDiv(x,i)){
        println(i);
        return false;
      }
    }
    return true;
  }
  public boolean isDiv(Long x,int y){return x%y==0;}
  public boolean isDivthrough(Long x, int y){
    for(int i = 1;i<y;i++){
      if(!isDiv(x,i)){
        println(i);
        return false;
      }
    }
    return true;
  }
  public int[] IntegertoInt(Integer[] x){
    int[] y = new int[x.length];
    for(int i = 0;i<x.length;i++){
      y[i]=x[i];
    }
    return y;
  }
  public int[] pFactor(int x,int[] y){
    int[] output = new int[y.length];
    int z = x;
    for(int i = 0;i<y.length;i++){
      while(isDiv(z,y[i])&&z>1){
        z=z/y[i];
        output[i]++;
      }
    }
    return output;
  }
  public void smallestdiv(){
    int[][] y = new int[c-1][];
    int[] primes = genPrime(c);
    for(int i = 2;i<=c;i++){
      y[i-2]=pFactor(i,primes);
    }
    for(int i = 0;i<primes.length;i++){
      int largest = -1;
      for(int k = 0;k<y.length;k++){
        if(y[k][i]>largest){
          largest=y[k][i];
        }
      }
      //println(largest,primes[i],(int)pow((float)primes[i],(float)largest));
      //println(output);
      div*=(int)pow((float)primes[i],(float)largest);
    }
  }
}
 类似资料:
  • 它直接在我的网站上找到0个结果,而不是做echo$行有什么想法吗?我希望它从我的数据库(phpmyadmin)中提取,数据库名称是events\u table。

  • 问题: 13195的质因数是5、7、13、29。 数字600851475143中最大的素因子是什么? 我发现这个很简单,但运行这个文件花了很长时间,已经运行了一段时间,我得到的最高数字是716151937。 这是我的代码,我只是要等待还是我的代码中有错误? }

  •  if 语句,就是类似于「如果○○的话,做●●」,根据条件判断脚本的一部分是否执行的语法。  语法如下: if(expression) 语句或语句块 else 语句或语句块  第一个“语句或语句块”是当 expression 表达式的结果为真时执行的部分,第二个“语句或语句块”则是结果为假时执行的部分。如果不需要 else 以后的部分,可以省略。 例: if(a==b) inform("a和b相等

  • 首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的

  • 目前在学校做信息技术评估,我的else声明遇到了问题。 代码: 不管怎样,为什么在if语句为真的情况下还要使用else语句呢?

  • 问题内容: 我对编程还比较陌生,最近开始学习Java,以便转向Android编程。我以为我会创建一个非常简单的计算器来练习,但是看来我的if语句不起作用。 我正在使用Eclipse IDE,并且在要求执行该操作之前,它运行良好。它会显示选项,但不会让我输入任何内容(我一直在用5乘以2进行测试)。 我搜索了类似的问题,并尝试了他们的建议,但似乎仍然行不通。我将不胜感激,我想这可能只是我正在做的一个简