// 10
public static void main(String[] args) {
//1~100000까지의 숫자중 소수 구하기
for (int n = 2; n <= 100000; n++) {
// n이 소수인지 알고싶을 때
// 2,3,4,...,n-1 중의 정수롤 n을 나누었을 때 하나라도 나누어 떨어지면 소수가 아니다
// 이때 n-1까지 안가도 되고 n/2까지만 해봐도 충분. n의 약수는 n/2보다 클수는 없어서
boolean isPrime = true; // 일단 소수라고 하고 소수가 아닌 증거를 찾기
for (int i = 2; i <= n/2 && isPrime; i++) { //isPrime이 되면 for문을 더이상 진행하지 않고 빠져나온다
if (n % i == 0) { // 소수가 아니다
isPrime = false;
}
}
if (isPrime) { // 소수면 출력
System.out.println(n);
}
}
}
사실 n/2까지도 안가도 되고 루트n까지만 돌아도 충분히 구할 수 있다
이때 루트를 나타내기 위해서는
for (int i = 2; i <= n/2 && isPrime; i++) { 이 for문을
for (int i = 2; i * i <= n && isPrime; i++) { 로 수정해주면 된다
// 11
public static void main(String[] args) {
//정수의 개수 n과 n개의 정수를 입력받아 배열에 저장한다
//중복된 정수 쌍의 개수를 카운트하여 줄력하기
//n=6이고 정수들이 2,4,2,4,5,2라면 중복된 정수 쌍은 (2,2), (2,2), (2,2),(4,4) 이다
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] data = new int [n];
for (int i = 0; i < n; i++) {
data[i] = kb.nextInt();
}
int count = 0;
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) { // i < j
if (data[i] == data[j]) {
count++;
}
}
}
System.out.println(count);
}
// 12
public static void main(String[] args) {
//n개의 정수를 입력받아 배열에 저장 후 이들 중에 0개 이상의 연속된 정수들을 더하여 얻을 수 있는 최대값을 구하기
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int [] data = new int[n];
for (int i = 0; i < n; i++) {
data[i] = kb.nextInt();
}
int max = 0;
for (int i = 0; i < n; i++) {
int sum = 0; //i의 출발점이 변경될 때 sum이 0으로 리셋
for (int j = i; j < n; j++) { //j=i라는건 시작점과 끝점이 같다는 뜻
// data[i]...data[j]까지 더할 때
//만약 sum > max이면
//max = sum;
sum += data[j];
if (sum > max) {
max = sum;
}
}
}
System.out.println(max);
}
// 13
public static void main(String[] args) {
//n개의 음이 아닌 한자리 정수를 입력받아 배열에 저장
//1개이상의 연속된 정수들을 이어붙여 하나의 정수로 만들어(ex. 7, 3, 1이라면 731) 얻을 수 있는 소수들 중에서 최댓값 구하기
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int [] data = new int[n];
for (int i = 0; i < n; i++) {
data[i] = kb.nextInt();
}
int max = 0;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
// data[i]~data[j]를 하나의 정수로 변경
int val = 0;
for (int k = i; k <= j; k++) {
val = val * 10 + data[k];
}
// 정수가 소수인지 검사
boolean isPrime = true;
for (int k = 2; k * k <= val && isPrime; k++) {
if (val % k == 0) {
isPrime = false;
}
}
//만약 소수가 맞다면 최댓값 확인
if (isPrime && val > 1 && val > max) {
max = val;
}
}
}
if (max > 0) {
System.out.println(max);
} else {
System.out.println("소수가 아닙니다");
}
}
val = val * 10 + data[k]; 이 val에 대한 설명!
만약 1, 9, 4 라는 세 정수를 사용한다면
val = 0;
val = val * 10 + 1 = 1;
val = val * 10 + 9 = 19;
val = val * 10 + 4 = 194;
이 과정으로 하나의 정수로 변경한다
그리고 만약 8짜리 배열 00010000을 입력했을때
소수가 없음에도 1이 출력되는 상황을 방지하기 위해
if (isPrime && val > 1 && val > max) { 이 if문 안에 val>1 조건을 추가해줬다