繁体   English   中英

打印 100 到 1000 之间的素数,其数字总和等于 19

[英]Printing prime numbers between 100 to 1000 whose digit sum equals to 19

我有这个问题。 我已经编写了相同的代码,但我无法找到我做错的地方。 它打印 100 为 output 没有别的。

package practicepkg;

import java.util.Scanner;

public class PrimeNumber {

    public static void main(String[] args) {
        System.out.println("Enter the number to check");
        Scanner in = new Scanner(System.in);
        //taking input for 1000
        int number =  in.nextInt();
        int count=0;
        int k,num=100,sum=0;
        //running loop from 100 to till user input(1000)
        for(k=100;k<=number;k++)
        {
            //loop for checking prime number
             for(int i=2;i<(int)(Math.sqrt(number));i++)
                    {
                        if(k%i==0)
                        {
                            count+=1;
                            
                        }
                        //here only taking prime numbers
                        if(count==0)
                        {
                            num=k;
                            //using while loop to calculate sum
                            while(num!=0)
                            {
                                sum=sum+num%10;
                                num=num/10;
                            }
                            //comparing and printing the actual prime number value for k
                            if(sum==19)
                            System.out.println(k);
                        }
                        //resetting the count value to zero for next iteration
                        count=0;    
                                            
                     }
                                     
        }
        
    }
}  

使用基本的蛮力方法,每个素数的总和应重置为 0,我们需要在完成检查数字是否为素数后计算总和。

public static void main(String[] args) {
    System.out.println("Enter the number to check");
    Scanner in = new Scanner(System.in);
    //taking input for 1000
    int number =  in.nextInt();
    int count=0;
    int k,num=100,sum=0;
    //running loop from 100 to till user input(1000)
    for(k=100;k<=number;k++)
    {
        //loop for checking prime number
         for(int i=2;i<(int)(Math.sqrt(number));i++)
         {
             if(k%i==0)
             {
                 count+=1;
             }                   
         }
         //This should be outside the loop that checks the number for prime
         if(count==0)
         {
             //Sum should be reset for each new prime number
             sum=0;
             num=k;
             //using while loop to calculate sum
             while(num!=0)
             {
                 sum=sum+num%10;
                 num=num/10;
             }
             //comparing and printing the actual prime number value for k
             if(sum==19)
                 System.out.println(k);
         }
         //resetting the count value to zero for next iteration
         count=0;            
    }
    
}

编辑:上述问题的最佳解决方案。 感谢@D George 指出

public static void main(String[] args) {
    System.out.println("Enter the number to check");
    Scanner in = new Scanner(System.in);
    //taking input for 1000
    int number =  in.nextInt();
    boolean flag = false;
        int k,num=100,sum=0;
        //running loop from 100 to till user input(1000)
        for(k=100;k<=number;k++)
        {
            //resetting the flag value to false for next iteration
             flag = false;
            //loop for checking prime number
             for(int i=2;i<(int)(Math.sqrt(number));i++)
             {
                 if(k%i==0)
                 {
                     flag=true;
                     break;
                 }                   
             }
             //This should be outside the loop that checks the number for prime
             if(!flag)
             {
                 //Sum should be reset for each new prime number
                 sum = 0;
                 num = k;
                 //using while loop to calculate sum
                 while(num!=0)
                 {
                     sum += num%10;
                     num /= 10;
                 }
                 //comparing and printing the actual prime number value for k
                 if(sum==19) {
                     System.out.println(k);
                 }
             }

        }
 }

您正在查看 100 到 1000 之间的数字。在该范围内,所有以偶数结尾或以 5 结尾的数字都不是质数,因此您甚至无需费心检查它们。 在该范围内,质数只能以 1、3、7 或 9 结尾。

这为您提供了伪代码,例如:

for (base <- 100; base < 1000; step 10)
  test(base + 1)
  test(base + 3)
  test(base + 7)
  test(base + 9)
endfor

这可以通过在素数测试之前检查base的数字和来进一步细化。 您只需要进一步检查base之和是 (19 - 1)、(19 - 3)、(19 - 7) 或 (19 - 9) 之一的位置。 这意味着您可以遍历 100 到 1000 的范围,只查看每十个数字,计算其数字总和,并检查后面十个数字中的一个潜在质数或一个潜在质数。

您可以通过注意数字和为 19 的最小三位数是 199 来节省更多时间,因此您可以从base而不是 100 开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM