• 因子与阶乘


    #include <stdio.h>
    #include <string.h>
    // 素数判定。注意:n不能太大 int is_prime(int n) { int i; for( i = 2;i*i <= n;i++) if(n % i == 0) return 0; return 1; } // 素数表 int prime[100], count = 0; int main() { // n和各个素数的指数
    int i, n,p[100];
    // 构造素数表 for( i = 2;i <= 100;i++) if(is_prime(i)) prime[count++] = i; // 把100以内的素数放在 prime数组里 while(scanf("%d",&n) == 1) { printf("%d !=",n); memset(p,0,sizeof(p)); 初始化 数组P int maxp = 0,j; for( i=1;i<=n;i++) {// 必须把i复制到变量m中,而不要在做除法时直接修改它
    int m =i; for(j = 0;j < count;j++) while(m%prime[j] == 0) { m/=prime[j]; p[j]++; if(j > maxp) maxp = j; // 更新最大素因子下标 } } // 只循环到最大下标 for(i = 0;i <= maxp;i++) printf("%d",p[i]); printf(" "); } return 0 ; }

      一个求素数的函数   

    int is_prime(int n)
    { int i;
    for( i = 2;i*i <= n;i++)
    if(n % i == 0) return 0;
    return 1;
    }   这一部分应该记住。之前有碰见过。( 一个数n 如果是合数,那么它的所有的因子不超过sqrt(n)-n  的开方)




    注意:

    做这一题是,不知道如何处理这个N!,如果可以转化成整数,那可以用以前的知识解决了。但是
    N很大的时候,就不行了。
    理论依据:

    也可以写成
    num=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n]  其中[]为取整
    求N!有几个要注意的地方。
    1.最大的质因子不会超过N,
    2.关于公式的转化:
    式子中把一些东西看成一个整体。举例:
    num=N/pi^1+N/pi^2+N/pi^3;
    ==>
    N/p1^1+(N/p1^1)/p1^1+((N/p1^1)/p1^1)/p1^1;
    这样的话就可以写成一个solve函数。
  • 相关阅读:
    Linux 文件特殊权限 SUID SGID SBIT
    Oracle Flashback 详解
    Oracle RMAN备份与还原注意事项
    Linux df 与du用法
    Oracle RMAN备份与还原
    Oracle 不小心删除undo数据文件以及磁盘空间不足导致不能登录的解决办法
    Oracle 内存参数调优设置
    Oracle Profile 配置文件
    关于php语言的使用!
    分享几个Javascript 封装方法
  • 原文地址:https://www.cnblogs.com/joyclub/p/3618806.html
Copyright © 2020-2023  润新知