首页 > 试题广场 >

因子个数

[编程题]因子个数
  • 热度指数:8985 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
一个正整数可以分解成一个或多个数组的积。例如36=2*2*3*3,即包含2和3两个因子。NowCoder最近在研究因子个数的分布规律,现在给出一系列正整数,他希望你开发一个程序输出每个正整数的因子个数。

输入描述:
输入包括多组数据。
每组数据仅有一个整数n (2≤n≤100000)。


输出描述:
对应每个整数,输出其因子个数,每个结果占一行。
示例1

输入

30<br/>26<br/>20

输出

3<br/>2<br/>2
我是利用set自动去重这一特性进行的问题求解,但时间上老是通过不了,通过调试发现是MAIN方法中WHILE循环输入的问题,但是我对其他问题进行求解的时候也是利用WHILE循环解决的多组输入问题就没啥事,有佬可以帮我看看问题出在哪里吗?

import java.util.Scanner; import java.util.TreeSet;
public class Main {     public static void main(String[] args) {         Scanner str = new Scanner(System.in);         while (str.hasNextInt()){             int n=str.nextInt();             System.out.println(soluation(n));         }     }     public static int soluation(int n) {         TreeSet<Integer> tree = new TreeSet<>();         for (int i = 2; i <= n; i++) {             if (n % i == 0) {                 n = n / i;                 tree.add(i);                  i=2;             }         }         int size= tree.size();         return size;     } }

发表于 2023-11-04 16:58:12 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int count = 0;
            for(int i = 2;i <= Math.sqrt(n);i++){
                if(n % i == 0){
                    while(n % i == 0){
                        n /= i;
                    } 
                  count++;                   
                }
            }
            if(n != 1){
                count++;
            }
            System.out.println(count);
        }
    }
}

发表于 2022-05-07 09:00:14 回复(0)
思路:一个数的因子就是2 3 5 以及循环整除 2 3 5之后的那个数,我觉得写的没什么问题,对比错误自测能过,但就是过不了,很纳闷。
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int a = in.nextInt();
            int a3=0;
            int a2=0;
            int a5=0;
            int aa=0;
            while(a>1){
                if(a%2==0){
                    a=a/2;
                    a2=1;
                }else if(a%3==0){
                    a=a/3;
                    a3=1;
                }else if(a%5==0){
                    a=a/5;
                    a5=1;
                }else{
                    a=a/a;
                    aa=1;
                }
            }
            int ret=a2+a3+a5+aa;
            System.out.println(ret);
        }
    }
}


发表于 2021-07-17 19:39:52 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        while(s.hasNext()){
            int n = s.nextInt();
            int ret = 0;
            // 从2到n的平方根开始遍历因子
            for(int i = 2; i <= Math.sqrt(n); i++){
                // 碰到能整除的因子
                if(n % i == 0){
                    // 不断地除这个因子直到不能整除为止,因子数加一,进入下一次循环
                    while(n % i == 0){
                        n = n / i;
                    }
                    ret++;
                }
            }
            // 当循环结束n不为1,即没能整除,说明此时的n也是一个因子
            if(n != 1) ret++;
            System.out.println(ret);
        }
    }
}

编辑于 2021-07-17 00:40:13 回复(0)

问题信息

难度:
4条回答 18029浏览

热门推荐

通过挑战的用户

因子个数