华为机试测试- 质数因子

根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        Long n=scanner.nextLong();
        System.out.println(convert(n));
        scanner.close();
    }
    public static String convert(Long n)
    {
        List<Long> list=new ArrayList<Long>();
        Long temp=n;
        for(long i=2;i<=temp/2;i++)
        {
            if(isPrimaryNum(i))
            {
                while(n%i==0)
                {
                    list.add(i);
                    n=n/i;
                }
                if(n==1)
                    break;
            }
        }
        String reStr="";
        for(int i=0;i<list.size();i++)
            reStr+=list.get(i)+" ";
        return reStr.trim();
    }

    public static boolean isPrimaryNum(long n)
    {
        if(n<=1)
            return false;
        if(n==2||n==3)
            return true;
        double sq=Math.sqrt(n);
        if(n%2==0)
            return false;
        for(int i=3;i<=sq;i+=2)
        {
            if(n%i==0)
                return false;
        }
        return true;
    }
}
时间: 2024-11-16 01:26:29

华为机试测试- 质数因子的相关文章

华为机试测试- 大数相加

方法一: 直接使用BigDecimal 方法二:字符串解析,注意stringBuilder.append(int x)这里的x最终会变成x字符串,而不是对应的char. 1 import java.math.BigDecimal; 2 import java.util.Scanner; 3 4 5 public class Main { 6 public static void main(String[] args) { 7 Scanner scanner=new Scanner(System.

华为机试测试- 字符串最长的数字串

输入 输入一个字符串. 输出 输出字符串中最长的数字字符串和它的长度. 如果数字字符串为空,则只输出0 如 input: dadfsaf  output:0 样例输入 abcd12345ed125ss123058789 样例输出 123058789,9 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { p

华为机试测试-

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 1 import java.util.Scanner; 2 3 4 public class Main { 5 public static void main(String[] args) { 6 Scanner scanner=new Scanner(System.in); 7 int n=scanner.nextInt(); 8 S

华为机试测试-矩阵乘法-循环

1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args){ 4 Scanner scanner=new Scanner(System.in); 5 int row=scanner.nextInt(); 6 int len=scanner.nextInt(); 7 int column=scanner.nextInt(); 8 int [][] x1=new int[row][

华为机试测试- 最小公倍数

import java.util.*; /*求最大公约数和最小公倍数*/ public class MaxCommonDivisorAndMinCommonMultiple { public static void main(String[] args) { Scanner scan = new Scanner(System.in);// 接收控制台输入的信息 System.out.print("请输入第一个整数:"); int num1 = scan.nextInt(); // 取出

华为机试测试-找偶数的相距最近的素数对

1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args){ 4 Scanner scanner=new Scanner(System.in); 5 int n=scanner.nextInt(); 6 for(int i=n/2;i>=2;i--) 7 { 8 if(isSushu(i) && isSushu(n-i)) 9 { 10 System.out.pri

华为机试测试- 求有序数组中最长的等差序列

原题目是求一个无序数组中最长的等差数列. 求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大:如果没有符合条件的就输出格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5] 思路: 1.排序 2.d的取值范围是[0,max-min],共有max-min+1种情况 3.对每一种情况进行查找 4.对于公差d,要求最长的等差序列,需要两个循环,一个外循环从头到尾遍历,内循环从外循环的起始遍历点开始利用公式 arr[i]=arr[start]+len*d,假如符合就长

华为机试测试-分苹果-递归

import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int m=scanner.nextInt(); int n=scanner.nextInt(); System.out.println(sharingApple(m, n)); scanner.close(); } public static in

华为机试测试-dna-字符串

一个DNA序列由A/C/G/T四个字母的排列组合组成.G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度).在基因工程中,这个比例非常重要.因为高的GC-Ratio可能是基因的起始点. 给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列. 输入 输入一个string型基因序列,和int型子串的长度 输出 找出GC比例最高的字串 样例输入 AACTGTGCACGACCTGA 5 样例输