1、打印1-100之间所有的素数
素数:(也说质数) 数学上指在大于1的整数中只能被1和它本身整除的数。如2、3、5、7、11、43、109。过去。
方法一:
如果数据i能够被[2 ,qsrt(i)]之间的数整除,则表示这个数不是素数。
当一个数n=a*b时,a和b中最小的数一定比qsrt(n)小,这样在这个区间中,只要有一个数可以整除n,就表明这个数不是素数。(例如:90,qsrt(90)=9.48,9*9=81,所以必有一个数小于qsrt(90)).
【代码示例】
public static void main(String[] args) {
for (int j = 2; j<=100 ;j++) {
int i;
for (i = 2;i <= Math.sqrt(j);i++) {
if(j%i == 0) {
//System.out.println("n不是素数:"+n);
break;
}
}
if(i > Math.sqrt(j)) {
System.out.println(j + "是素数");
}
}
}
方法二:
用一个数除以它之前的所有数,当都不能被整除的时候,则这个数为素数。
【代码示例】
public static void main(String[] args) {
//外层生成被除数
for (int i = 2; i < 100; i++) {
boolean flg = false;
//内层生成除数
for (int j = 2; j < i; j++) {//j不能等于1,等于1的话,每进来一个数i%1 都等于0
if(i%j == 0){
flg = true;
break;//跳出内层循环
}
}
if(flg == false){
System.out.print(i+" ");
}
}
}
方法三:
是对方法二的优化,当除到这个数的一半的时候,没有数能够将这个数整除。就可以确定这个数为素数。
【代码示例】
public static void main(String[] args) {
//外层生成被除数
for (int i = 2; i < 100; i++) {
boolean flg = false;
//内层生成除数
for (int j = 2; j < i/2; j++) {//j不能等于1,等于1的话,每进来一个数i%1 都等于0
if(i%j == 0){
flg = true;
break;//跳出内层循环
}
}
if(flg == false){
System.out.print(i+" ");
}
}
}
2、编写程序数一下1-100的所有整数中出现多少个数字9
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < 100; i++) {
if(i%10 == 9){//判断个位是否为9
count ++;
}
if(i/10 == 9){//判断十位是否为9
count++;
}
}
System.out.println(count);
}
3、求一个整数,在内存当中存储时,二进制1的个数。
采用按位与(&),将每个数与1按位与,这样就可以得到二进制的数,当n&1==1的时候,计数,判断完之后,将二进制数向右移动一位(无符号右移)。
这里要考虑到正数和负数,所以我们采用无符号右移(>>>)向右移动一位,左边补0.
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int count = 0;
while(num!=0){
if((num&1) == 1){
count++;
}
num = num>>>1;//表示向右移动一位,左边补0
}
System.out.println(count);
}
4、求两个整数的最大公约数
辗转相除法
例子:18和24的最大公约数
第一次:a = 18 b = 24 c = a%b = 18%24 = 18
循环中:a = 24 b=18
第二次:a = 24 b = 18 c = a%b = 24%18 = 6
循环中:a = 18 b = 6
第三次:a = 18 b = 6 c=a%b = 18%6 = 0
循环结束
【代码示例】
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入两个数");
int a = scan.nextInt();
int b = scan.nextInt();
func(a,b);
}
public static void func(int a,int b){
while(a%b != 0){
int c = a%b;
a = b;
b = c;
}
System.out.println("最大公约数为"+b);
}
}
5、X型图案
【代码示例】
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
if(scan.hasNext()){
int n = scan.nextInt();
//每一行
for (int i = 0; i < n ; i++) {
//每行当中的每列
for (int j = 0; j < n; j++) {
if(i == j||i+j ==n-1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
注意:上述的这句代码
if(i == j||i+j ==n-1){
前边的i == j判断的是i和j相等的时候输出*,但是如果后面没有i+j == n-1的这句代码,最后产生的结果就会成为单行,不能形成X。