练习Day——4

目录

    • 分解质因数
    • 素因子去重(ALGO-190)
    • 二进制数数
    • 大等于n的最小完全平方数
    • 整商问题
    • 计数问题

分解质因数

题目描述
求出区间[a,b]中所有整数的质因数分解。

提示
先筛出所有素数,然后再分解。
数据规模和约定
2< =a< =b< =10000

输入
输入两个整数a,b。

输出
每行输出一个数的分解,形如k=a1 * a2 * a3…(a1< =a2< =a3…,k也是从小到大的)(具体可看样例)

样例输入
3 10

样例输出
3=3
4=2 * 2
5=5
6=2 * 3
7=7
8=2 * 2 * 2
9=3 * 3
10=2 * 5


//分解质因数

import java.util.Scanner;

public class Main {
     
	public static void main(String[]args) {
     
		Scanner scan=new Scanner(System.in);
		int a=scan.nextInt();
		int b=scan.nextInt();
		
		for(int i=a;i<=b;i++) {
     
			int m=i;
			System.out.print(i+"=");
			//从2开始依次遍历(判断j是否为素因子)
			for(int j=2;j<=m;j++) {
     
				//找到被整除的数j,一直除以j直到m==j
                //用来寻找t的所有因子
				while(m%j==0 && j!=m) {
     
					System.out.print(j+"*");
					m/=j;
				}
				if(m==j) {
     //相等,则证明所有因子都找到了
					System.out.println(j);
				}
			}
		}
        
	}

}

素因子去重(ALGO-190)

(存疑)

问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1。

输入格式
一个整数,表示n

输出格式
输出一行,包含一个整数p
  
样例输入
1000

样例输出
10

数据规模和约定
n<=10^12
样例解释:n=1000=2^353,p=2*5=10

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

//素因子去重
public class Main {
     
	public static void main(String[] args) {
     
		Scanner scan=new Scanner(System.in);
		long n=scan.nextLong(); 
		int p=1;
		List<Integer> list=new ArrayList<Integer>();  
		
		
		for(int i=2;i<n;i++) {
     
			if(n%i==0) {
     
				list.add(i);
				n=n/i;
				while(n%i==0) {
         //实现因子去重
					n=n/i;
				}
			}
			if(n<i) {
           //当n
				break;
			}
		}
		list.add((int) n);
		for(int num:list) {
            //遍历集合
			p*=num;
		}
		System.out.println(p);
	}

}


二进制数数

题目描述
给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
如5的二进制为101,包含2个“1”。

输入
第一行包含2个数L,R

输出
一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。

样例输入
2 3

样例输出
3

import java.util.Scanner;

//二进制数数
public class Main {
     
	public static void main(String[]args) {
     
		Scanner scan=new Scanner(System.in);
		int l,r;
		l=scan.nextInt();
		r=scan.nextInt();
		int sum=0;//记录总的1的个数
		
		for(int i=l;i<=r;i++) {
     
			sum+=func(i);
		}
		
		System.out.println(sum);
	}

	private static int func(int i) {
     
		int sum=0;
		while(i>0) {
     
			int tmp=i%2;
			if (tmp==1)
				sum++;
			
			i/=2;
			//System.out.println(tmp);
		}
		return sum;
	}

}

大等于n的最小完全平方数

问题描述
输出大等于n的最小的完全平方数。
若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数
Tips:注意数据范围

输入格式
一个整数n
  
输出格式
大等于n的最小的完全平方数
  
样例输入
71711

样例输出
71824

数据规模和约定
n是32位有符号整数

import java.util.Scanner;

//大等于n的最小完全平方数
public class Main {
     
	public static void main(String[]args) {
     
		Scanner scan=new Scanner(System.in);
		long n=scan.nextInt();
		
		long i=n;
		while(true) {
     
			if(Math.round(Math.sqrt(i))==Math.sqrt(i)) {
     
				System.out.print(i);
				break;
			}
			else {
     
				i++;
			}
		}
	}

}

整商问题

问题描述
提示用户输入被除数(dividend)和除数(divisor),若除数为0,则提示用户重新输入,直至除数非零为止。最后输出商。程序建议大家将被除数、除数和商都定义为整形。
输入被除数提示语句为:Please enter the dividend:
输入除数提示语句为:Please enter the divisor:
提示除数为0需要重新输入的语句为: Error: divisor can not be zero! Please enter a new divisor:
建议:大家直接复制上述语句,以免出现不必要的错误。
  
输入
被除数 除数
注:若除数为零,则需要连续输入除数直至其非零为止。
  
输出
提示性语句 商
注意每个提示性语句输出后需要换行,具体参考下面的样例输出。
  
样例输入
一个满足题目要求的输入范例。
例1:
10 2
例2:
20 0 0 4

样例输出
与上面的样例输入对应的输出。

例1:
Please enter the dividend:
Please enter the divisor:
5

例2:
Please enter the dividend:
Please enter the divisor:
Error: divisor can not be zero! Please enter a new divisor:
Error: divisor can not be zero! Please enter a new divisor:
5

import java.util.Scanner;

//整商问题
public class Main {
     
	public static void main(String[]args) {
     
		Scanner scan=new Scanner(System.in);
		int a,b;
		System.out.println("Please enter the dividend:");
		a=scan.nextInt();//被除数
		System.out.println("Please enter the divisor:");
		b=scan.nextInt();//除数
		
		while(b==0) {
     
			System.out.println("Error: divisor can not be zero! Please enter a new divisor:");
			b=scan.nextInt();
		}
		
		System.out.println(a/b);
	}

}

计数问题

问题描述
试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。

输入格式
输入文件名为 count.in。
输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开。

输出格式
输出文件名为 count.out。
输出共 1 行,包含一个整数,表示 x 出现的次数。
练习Day——4_第1张图片
数据说明
对于 100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。

import java.util.Scanner;

//计数问题
public class Main {
     
	public static void main(String[]args) {
     
		Scanner scan=new Scanner(System.in);
		int n,x;
		n=scan.nextInt();
		x=scan.nextInt();
		
		int sum=0;
		for(int i=1;i<=n;i++) {
     
			sum+=fun(i,x);
		}
		
		System.out.println(sum);
	}

	private static int fun(int n, int x) {
     
		int sum=0;
		while(n>0) {
     
			if(n%10==x) {
     
				sum++;
			}
			n/=10;
		}
		return sum;
	}

}

你可能感兴趣的:(蓝桥杯练习)