[英]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.