[英]Prime number check java
編寫一個程序來讀取n個數字。 指定為輸入的第一個數字將為n。 接下來,程序應該讀取n個整數。
程序應該檢查每個數字是否為素數以及反向是素數。
按升序顯示所有這些數字。
請考慮下面的輸入和輸出示例:
輸入:7 11 12 23 19 7 113 101
輸出:
7 11 101 113
我的代碼
public class Prime {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int temp;
int[] a = new int [x];
int[] r = new int [x];
int[]c = new int[a.length+r.length];
int[] rev = new int [x];
for(int i=0;i<x;i++){
a[i] = sc.nextInt();
rev[i]=a[i];
}
for(int i = 0; i < a.length; i++) {
while(rev[i] != 0) {
r[i] = r[i] * 10;
r[i] = r[i] + rev[i]%10;
rev[i] = rev[i]/10;
}
}
for(int i = 0; i < a.length; i++) {
boolean isPrime = true;
for (int j = 2; j < i; j++) {
if((a[i]%j==0) || (r[i]%j==0)) {
isPrime = false;
break;
}
}
if(isPrime)
System.out.println(a[i]);
System.out.println(r[i]);
}
}
}
在某個地方,我卡住了,我不知道如何消除重復的否,如何合並最后的數組,並且當我輸入和2時,它打印1和2作為素數否
你可以嘗試下面的代碼。 希望它能幫到你,
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class PrimeNumberTest {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(Arrays.asList(7, 11, 12, 23, 19, 7 ,113, 101));
//To remove duplicates
Set<Integer> set = new TreeSet<>(list);
System.out.println(getPrimeNumbers(set).toString().replaceAll(",", "").replace("]", "").replace("[", ""));
}
//Method to get unique ordered set of prime numbers
private static Set<Integer> getPrimeNumbers(Set<Integer> set) {
Set<Integer> resultList=new TreeSet<>();
set.forEach(ele->{
//check for prime
if(isPrime(ele)){
//if prime number check for reverse and if true, add to result
if(isPrime(reverserNumb(ele)))
resultList.add(ele);
}
});
return resultList;
}
private static boolean isPrime(int num){
if(num<2)
return false;
// Check for even numbers
if (num % 2 == 0) {
return num == 2;
}
// Check for odd numbers
for (int i = 3; i*i <= num; i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
private static int reverserNumb(int num) {
return Integer.valueOf(new StringBuilder(String.valueOf(num)).reverse().toString());
}
}
您需要使用TreeSet - 它將僅包含不同的元素並以排序的形式提供結果。 你可以參考以下代碼 -
Set<Integer> set = new TreeSet<>();
for(int i = 0; i < a.length; i++) {
boolean isPrime = true;
if(isPrime(a[i]) && isPrime(r[i]))
set.add(a[i]);
}
Iterator it = set.iterator();
while(it.hasNext())
System.out.print(it.next() + " ");
還創建一個檢查素數的函數 -
private static boolean isPrime(int num) {
if(num==1) return false;
for(int i = 2; i <= num/2; ++i)
{
if(num % i == 0)
{
return false;
}
}
return true;
}
這是使用√n方法進行主要測試的代碼
static boolean isPrime(int n){
//corner case
if (n <= 1) return false;
if (n <= 3) return true;
//middle 5 number
if (n % 2 == 0 || n % 3 == 0) return false;
for (int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false;
return true;
}
使用可以使用set
來刪除重復元素
嘗試此代碼有效,希望它有所幫助
碼:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class PrimeNumbers {
static ArrayList<Integer> prime = new ArrayList<>();
public static void main(String[] args) {
Scanner user_input = new Scanner(System.in);
System.out.print("Enter Number of Integers: ");
int number_count = user_input.nextInt();
int[] numbers = new int[number_count];
for (int i = 0; i < numbers.length; i++) {
System.out.print("Enter Integer: ");
numbers[i] = user_input.nextInt();
}
System.out.print("Values Entered: ");
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + " ");
checkPrime(numbers[i],false); //false don't reverse
checkPrime(numbers[i],true); //true reverse value to check if it is also prime
}
System.out.print("\nList of prime numbers: ");
Collections.sort(prime);
for(int n : prime){
System.out.print(n + " ");
}
if(prime.isEmpty()){
System.out.print("no prime numbers on list\n");
}
}
//check for duplicates
static void insertValueToPrime(int n){
for(int p : prime){
if(n == p){
return;
}
}
prime.add(n);
}
static void checkPrime(int n,boolean isReverse) {
int i, m = 0, flag = 0,realn = n;
if(isReverse){
n = reverseNumber(n);
}
m = n / 2;
if (n == 0 || n == 1) {
//no a prime number
} else {
for (i = 2; i <= m; i++) {
if (n % i == 0) {
// not a prime number
flag = 1;
break;
}
}
if (flag == 0) {
insertValueToPrime(realn);
}
}
}
static int reverseNumber(int n){
String reverse = "",str=""+n;
for(int i = str.length() - 1; i >= 0; i--)
{
reverse = reverse + str.charAt(i);
}
return Integer.parseInt(reverse);
}
}
您可以在Java 8中使用Stream.distinct()將數組傳遞給數組列表並使用.distinct()
刪除其重復項
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
//list with duplicates
List<Integer> list = new ArrayList<>(
Arrays.asList(3, 10, 3, 3, 4, 5, 5));
//new list without duplicates
List<Integer> newList = list.stream()
.distinct()
.collect(Collectors.toList());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.