题目描述
求出区间[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);
}
}
}
}
}
(存疑)
问题描述
给定一个正整数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的最小的完全平方数。
若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数
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 出现的次数。
数据说明
对于 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;
}
}