簡體   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