• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

serendipityx

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

奇♂妙拆分

 

题目描述

在遥远的米♂奇♂妙♂妙♂屋里住着一群自然数,他们没事就喜欢拆♂开自己来探♂究。现在他们想知道自己最多能被拆分成多少个不同的自然数,使得这些自然数相乘的值等于被拆分的数。

输入描述:

第1行输入一个整数T,代表有T组数据。
第2-T+1行,每行输入一个整数n,代表需要被拆分的数。
数据保证:0<T≤100,0<n≤109。

输出描述:

输出一共T行,第i行输出一个整数,代表第i行输入的n最多可以被拆分成多少个不同的自然数。
示例1

输入


3
1
4
12

输出


1
2
3

说明

1可以被拆分为:1
4可以被拆分为:1*4(1*2*2是不允许的,因为有重复的数)
12可以被拆分为:1*2*6或1*3*4
示例2

输入

    1

114514

输出

4

说明

114514可以被拆分为:1*2*31*1847


思路:贪心,从最小的因子开始找,这种情况下整数n能拆出最多的因子

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
const int maxn=1e9;
    
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll n;
        cin>>n;
        int i,ans=0;
        for(i=1;i<=n;i++)
            if(!(n%i))
            {
                ans++;
                n/=i;
            }
        cout<<ans<<endl;
    }
    return 0;
}

 

 

posted on 2020-05-24 23:55  Adventurer-  阅读(198)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3