关于整数"n"相关的简单编程问题
名词解析:
**1.**素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为素数,也称质数。我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
**2.**斐波那契数列(1,1,2,3,5,8…)
**3.**将一个正整数分解质因数。例如:90=2x3x3x5。
**4.**阶乘问题,例如:4!=4x3x2x1。
题目及代码如下:
package com.zzh;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输具体的n值为:");
int n = sc.nextInt();
int result1 = sum1(n);
System.out.println("#################前n个素数之和################");
System.out.println("前" + n + "个素数之和为:" + result1);
System.out.println("############前n个数中的所有素数之和##############");
int result2=sum2(n);
System.out.println("从1到" + n + "之间的所有素数之和为:" + result2);
System.out.println("##############判断是否为2的n次方###############");
boolean isPower=Power(n);
System.out.println(isPower);
System.out.println("##############请输出斐波那契数列的第n项##############");
int result3=fibonacciSequence(n);
System.out.println(result3);
System.out.println("##############请输出斐波那契数列的前n项和##############");
int result4=sumFibonacci(n);
System.out.println(result4);
System.out.println("###青蛙一次可以跳上1级台阶或2级则该青蛙跳上n级台阶总跳法###");
int result5=jump(n);
System.out.println(result5);
System.out.println("################将n分解质因数并打印出来############");
breakDown(n);
System.out.println("################求1+2!+3!+...+n!的和############");
long result6=factorial(n);
System.out.println(result6);
}
public static int sum1(int n) {
int num = 2;//从第一个素数开始
int index = 0;//计算第几个素数;
int sum1 = 0;//计算素数之和;
int count = 0;//计算被整除的个数,即筛选是否为素数。
for (int i = 0;; i++) {
for (int j = 1; j <= num; j++) {
if (num % j==0) {
count+=1;
}
}
if (count == 2) {
index += 1;
sum1 += num;
}
count = 0;
num += 1;
if (index == n) {
break;
}
}
return sum1;
}
public static int sum2(int n){
int sum2 = 0;//计算素数之和;
int count = 0;//计算被整除的个数,即筛选是否为素数。
for (int i = 0;i<=n; i++) {
for (int j = 1; j <= i; j++) {
if (i % j==0) {
count +=1;
}
}
if (count == 2) {
sum2 += i;
}
count = 0;
}
return sum2;
}
public static boolean Power(int n){
if(n<=1){
return false;
}
int m=n&(n-1);
return m==0;
}
public static int fibonacciSequence(int n) {
if(n==0)
return 0;
else if(n <= 2){
return 1;//斐波那契数列前两项全为1;
}else{
int a=1;//设置斐波那契数列第1个项
int b=1;//设置斐波那契数列第2个项
int sum=0;
for (int i = 2; i < n; i++) {
sum=a+b;
a=b;
b=sum;
}
return sum;
}
}
public static int sumFibonacci(int n) {
if(n==0)
return 0;
else if(n <= 2){
return n;//斐波那契数列前两项全为1;
}else{
int a=1;//设置斐波那契数列第1个项
int b=1;//设置斐波那契数列第2个项
int sum=0;
int count=2;
for (int i = 2; i < n; i++) {
sum=a+b;
a=b;
b=sum;
count+=sum;
}
return count;
}
}
public static int jump(int n) {
//本题也可用递归算法求解,第n个台阶为第(n-1)个台阶加上第(n-2)个台阶的跳法
if(n<=2)
return n;//前两个台阶为台阶数
else{
int a=1;
int b=2;
int count=0;
for (int i = 2; i < n; i++) {
count=a+b;
a=b;
b=count;
}
return count;
}
}
public static void breakDown(int n){
int a=2;
System.out.print(n + "=");
if(n<2){
System.out.println(n);
}
while(a <= n) {
if(a == n){
System.out.println(n);
break;
} else if( n%a == 0) {
System.out.print(a + "*");
n = n/a;
} else
a++;
}
}
public static long factorial(int n) {
long f = 1;
long result = 0;
for(int i=1; i<=n; i++) {
f= f * i;
result += f;
}
return result;
}
}