我有这个问题。我已经写了相同的代码,但我无法找到错误的地方,我做错了。它正在打印100作为输出。
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;
}
}
}
}
2条答案
按热度按时间ycl3bljg1#
使用基本的暴力方法,每个素数的和应该重置为0,我们需要在检查完这个数是否为素数后计算和。
编辑:上述问题的最佳解决方案。感谢@d george指出这一点
eh57zj3b2#
你看到的是100到1000之间的数字。在这个范围内,所有以偶数结尾或以5结尾的数字都不是素数,所以你甚至不需要费心去检查它们。素数只能在该范围内以1、3、7或9结尾。
这就产生了伪代码,比如:
这可以通过检查
base
初次测试前。你只需要进一步检查base
是(19-1)、(19-3)、(19-7)或(19-9)之一。这意味着你只需看每10个数字,计算其数字和,检查后面10个数字中的一个或一个潜在素数,就可以跨过100到1000的范围。你可以通过注意到最小的三位数(数字和为19)是199来节省更多的时间,这样你就可以开始了
base
是190而不是100。