第一题:
/*有限域问题:
*在n的范围内,某一个数是素数或者是素数的k次方(素数的k次方不一定还是素数),
*则认为满足要求,求满足这样的数的个数。例如当n=37时,满足要求的数共19个:
*2,3,4,5,7,8,9,11,13,16,17,19,23,25,27,29,31,32,37。
*/
import java.util.Scanner;
public class FiniteField {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int n = sc.nextInt();
int flag[] = new int[n + 1]; //标识数组,如果某一个数已经判断过是素数了,则下次不用再判断
int count = 0;
for(int j = 2; j <= n; j ++){
if(flag[j] == 1)
continue;
if(isPrime(j)){
flag[j] = 1;
count ++;
int base = j;
while(base * j <= n){ //质数的k次方也是满足要求的
base = base * j;
flag[base] = 1;
count ++;
}
}
}
System.out.println(count);
}
}
//判断一个数是否是素数
public static boolean isPrime(int number){
if(number == 2)
return true;
if(number < 2 || number % 2 == 0) //偶数肯定不是素数(除了2),奇数不一定是素数(例如9),素数肯定是3,5,7,,
return false;
for(int j = 3;j <= Math.sqrt(number);j += 2){ //该数已经不是2的倍数了,更不可能是4,6,8,,的倍数,所以j += 2
if(number % j == 0){
return false;
}
}
return true;
}
}
第二题:
/*
*给定一个数n,若一个数满足要求:小于n,且二进制形式是回文串,
*统计这样的数的个数
*/
import java.util.Scanner;
public class CountPalindrome {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while(s.hasNext()) {
Long n = s.nextLong();
long count = 0;
for(int i = 0;i < n;i ++) {
if(i != 0 && i % 2 == 0) { //偶数的二进制形式肯定不是回文串
continue;
}
String str = Integer.toBinaryString(i);
if(isMatch(str)) {
count ++;
System.out.println(i + " " + str + " ");
}
}
System.out.println(count);
}
}
//判断是否是回文串
public static boolean isMatch(String str) {
int i = 0;
int j = str.length() - 1;
for(;i < str.length() / 2;i ++) {
if(str.charAt(i) == str.charAt(j)) {
j --;
}
else {
return false;
}
}
return true;
}
}
2018微众银行春招后端开发实习题解
猜你喜欢
转载自blog.csdn.net/zhou15755387780/article/details/80655921
今日推荐
周排行