zoukankan      html  css  js  c++  java
  • rin和快速迭代

    链接:https://ac.nowcoder.com/acm/contest/3002/E

    rin最近喜欢上了数论。
    然而数论实在太复杂了,她只能研究一些简单的问题。
    这天,她在研究正整数因子个数的时候,想到了一个“快速迭代”算法。设 的因子个数,将 迭代下去,rin猜想任意正整数最终都会变成
    例如:
    她希望你帮她验证一下。她会给你一个正整数 ,让你输出它在迭代过程中,第一次迭代成 的迭代次数。
    输入描述:
    一个正整数 

    输出描述:

    一个正整数,为 

    迭代至

    的次数。
    示例1

    输入 12

    输出 4

    说明

    12的因子:1,2,3,4,6,12。共6个。
    6的因子:1,2,3,6。共4个。
    4的因子:1,2,4。共3个。
    3的因子:1,3。共2个。
    12 → 6 → 4 → 3 → 2 , 故迭代了4次。
    思路:一道简单的数论题(勉强算???),的根据题目的数据范围以及时间,直接用一个 O(√n) 的时间复杂度的求因子个数的函数就行。
    代码:
     1 #include <map>
     2 #include <set>
     3 #include <list>
     4 #include <stack>
     5 #include <queue>
     6 #include <deque>
     7 #include <cmath>
     8 #include <ctime>
     9 #include <string>
    10 #include <limits>
    11 #include <cstdio>
    12 #include <vector>
    13 #include <iomanip>
    14 #include <cstdlib>
    15 #include <cstring>
    16 #include <istream>
    17 #include <iostream>
    18 #include <algorithm>
    19 #define ci cin
    20 #define co cout
    21 #define el endl
    22 #define Scc(c) scanf("%c",&c)
    23 #define Scs(s) scanf("%s",s)
    24 #define Sci(x) scanf("%d",&x)
    25 #define Sci2(x, y) scanf("%d%d",&x,&y)
    26 #define Sci3(x, y, z) scanf("%d%d%d",&x,&y,&z)
    27 #define Scl(x) scanf("%I64d",&x)
    28 #define Scl2(x, y) scanf("%I64d%I64d",&x,&y)
    29 #define Scl3(x, y, z) scanf("%I64d%I64d%I64d",&x,&y,&z)
    30 #define Pri(x) printf("%d
    ",x)
    31 #define Prl(x) printf("%I64d
    ",x)
    32 #define Prc(c) printf("%c
    ",c)
    33 #define Prs(s) printf("%s
    ",s)
    34 #define For(i,x,y) for(int i=x;i<y;i++)
    35 #define For_(i,x,y) for(int i=x;i<=y;i++)
    36 #define FFor(i,x,y) for(int i=x;i>y;i--)
    37 #define FFor_(i,x,y) for(int i=x;i>=y;i--)
    38 #define Mem(f, x) memset(f,x,sizeof(f))
    39 #define LL long long
    40 #define ULL unsigned long long
    41 #define MAXSIZE 100005
    42 #define INF 0x3f3f3f3f
    43  
    44 const int mod=2e7;
    45 const double PI = acos(-1.0);
    46  
    47 using namespace std;
    48  
    49 int count(LL n)
    50 {
    51     int s=1;
    52     for(int i=2; i*i<=n; i++)
    53     {
    54         if(n%i==0)
    55         {
    56             int a=0;
    57             while(n%i==0)
    58             {
    59                 n/=i;
    60                 a++;
    61             }
    62             s=s*(a+1);
    63         }
    64     }
    65     if(n>1) s=s*2;
    66     //当n大于1时,说明还有一个因子的幂时1,故乘上(1+1)即为最终答案。
    67     return s;
    68 }
    69 int main()
    70 {
    71     LL n;
    72     ci>>n;
    73     int cnt=1;
    74     while(1)
    75     {
    76         int tmp=count(n);
    77         if(tmp==2)
    78             break;
    79         cnt++;
    80         n=tmp;
    81  
    82     }
    83     Pri(cnt);
    84     return 0;
    85 }
    View Code
  • 相关阅读:
    原型设计
    简单APP——ToDoList的二次开发(日期规范化+构建搜索栏)
    Java基本语言篇
    C++中各种常用转换汇总学习
    语言篇swift
    洛谷P2384 最短路,积化加
    洛谷P4568 分层图最短路
    【洛谷P1962】矩阵快速幂求Fibonacii数列
    vue-cli教程
    单页应用原理
  • 原文地址:https://www.cnblogs.com/hbhdhd/p/12268247.html
Copyright © 2011-2022 走看看