题意:问小于n的数的乘积能拼成的最大平方数是多少?

思路:给n!做质数分解在除去指数为奇数的那些质数,由于题目中需要模运算所以不能直接除,必须乘上摸逆。

代码如下:

 1 /**************************************************
 2  * Author     : xiaohao Z
 3  * Blog     : http://www.cnblogs.com/shu-xiaohao/
 4  * Last modified : 2014-06-28 15:26
 5  * Filename     : hdu_4196.cpp
 6  * Description     :
 7  * ************************************************/
 8
 9 #include <iostream>
10 #include <cstdio>
11 #include <cstring>
12 #include <cstdlib>
13 #include <cmath>
14 #include <algorithm>
15 #include <queue>
16 #include <stack>
17 #include <vector>
18 #include <set>
19 #include <map>
20 #define MP(a, b) make_pair(a, b)
21 #define PB(a) push_back(a)
22
23 using namespace std;
24 typedef long long ll;
25 typedef pair<int, int> pii;
26 typedef pair<unsigned int,unsigned int> puu;
27 typedef pair<int, double> pid;
28 typedef pair<ll, int> pli;
29 typedef pair<int, ll> pil;
30
31 const int INF = 0x3f3f3f3f;
32 const double eps = 1E-6;
33 const int MOD = 1e9+7;
34 const int MAXN = 10000000+1;
35 int prime[MAXN], n;
36 int f[MAXN];
37
38 void getPrime()
39 {
40     memset(prime,0,sizeof(prime));
41     for(int i = 2;i <= MAXN;i++)
42     {
43         if(!prime[i])prime[++prime[0]] = i;
44         for(int j = 1;j <= prime[0] && prime[j] <= MAXN/i;j++)
45         {
46             prime[prime[j]*i] = 1;
47             if(i % prime[j] == 0)break;
48         }
49     }
50 }
51
52 ll inv(ll a,ll m)
53 {
54     if(a == 1)return 1;
55     return inv(m%a,m)*(m-m/a)%m;
56 }
57
58 //求x!中p(素数)因子的个数
59 ll ff(ll x, ll p){
60     ll tp = p, ret = 0;
61     while(tp <= x){
62         ret += (x/tp);
63         tp = tp*p;
64     }
65     return ret;
66 }
67
68 int main()
69 {
70     freopen("in.txt", "r", stdin);
71
72     f[0] = 1;
73     for(int i=1; i<=MAXN; i++)
74         f[i] = (ll)f[i-1] * i % MOD;
75     getPrime();
76     while(scanf("%d", &n)!=EOF && n){
77         ll ans = 1;
78         for(int i=1; i <= prime[0] && prime[i]<=n; i++){
79             ll tp = ff(n, prime[i]);
80             if(tp & 1) ans = (ll)ans * prime[i] % MOD;
81         }
82         ans = (f[n] * inv(ans, MOD))%MOD;
83         printf("%I64d\n", ans);
84     }
85     return 0;
86 }

View Code

转载于:https://www.cnblogs.com/shu-xiaohao/p/3813971.html

hdu 4196(数论)相关推荐

  1. hdu 3641 数论 二分求符合条件的最小值数学杂题

    http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*================================= ...

  2. HDU 4651 数论 partition 求自然数的拆分数

    别人的解题报告: http://blog.csdn.net/zstu_zlj/article/details/9796087 我的代码: 1 #include <cstdio> 2 #de ...

  3. HDU 6069 数论 区间素数筛 + 赛后反思

    题目链接 设 x = p 1 a 1 p 2 a 2 . . . . p n a n x = p_1^{a_1}p_2^{a_2}....p_n^{a_n} x=p1a1​​p2a2​​....pna ...

  4. 7. 数论四大定理(威尔逊定理、欧拉定理、费马小定理、孙子定理)

    一.准备工作 点击查看数论基础知识 二.威尔逊定理 威尔逊定理给出了判定一个自然数是否为素数的充分必要条件.但是由于阶乘是呈爆炸增长的,其结论对于实际操作意义不大. 1. 定理及其变形 当且仅当p为素 ...

  5. NOI数学:莫比乌斯变换

    P5491 [模板]二次剩余 [模板]二次剩余 - 洛谷 P1082 [NOIP2012 提高组] 同余方程 [NOIP2012 提高组] 同余方程 - 洛谷 [模板题]Luogu-P4717 快速莫 ...

  6. 三个重要的同余式——威尔逊定理、费马小定理、欧拉定理 + 求幂大法的证明

    一.威尔逊定理 若p为质数,则 p|(p-1)!+1 亦:(p-1)! ≡ p-1 ≡ -1(mod p) 例题: HDU 2973 YAPTCHA (威尔逊定理及其逆定理) 解题报告见http:// ...

  7. 数学--数论--HDU - 6395 Let us define a sequence as below 分段矩阵快速幂

    Your job is simple, for each task, you should output Fn module 109+7. Input The first line has only ...

  8. 数学--数论--HDU 2582 F(N) 暴力打表找规律

    This time I need you to calculate the f(n) . (3<=n<=1000000) f(n)= Gcd(3)+Gcd(4)+-+Gcd(i)+-+Gc ...

  9. hdu 3123(GCC)数论

    http://acm.hdu.edu.cn/showproblem.php?pid=3123 题目给出的n很大,很明显如果n很大时,是不用处理到n的,所以其中必有蹊跷! 当n大于m时 ,n的阶乘中必定 ...

最新文章

  1. 与跨国巨头合作,做羊还是做狼? --- 我看SAP取消HAND合作伙伴资格
  2. maven根据profile动态选择配置文件
  3. Python的生成器(generator)
  4. html鼠标点击有手势出来,用原生js+css3撸的一个下拉手势事件插件
  5. 树莓派使用STEP4:安装vim
  6. 小县城里的体制内剩女:一个日益庞大却被悬置的群体?
  7. sqlserver html文档,[SQLServer]从SQL中的一个表中导出HTML文件表格
  8. Python版插入排序算法
  9. c语言给一个函数添加功能,【C语言】请编写实现以下功能函数:实现对一个8bit数据(unsigned char)的指定位(例如第8位)的置0或置1操作,并保持其他位不变...
  10. 2022-03-29 软件外包流程
  11. 软件评測师真题考试分析-5
  12. 尚硅谷Java8 新特性学习笔记
  13. 获取时间戳及转化为yyyyMMdd格式的时间
  14. 服务器PCI插槽上的固态硬盘,固态硬盘常见接口图解
  15. 编译原理中单线箭头->和双线箭头=>有什么区别
  16. R语言编程技术(2)
  17. matlab fisher检验,模式识别中Fisher分类器的Matlab实现及测试
  18. gt,gte,lt,lte含义
  19. java随机生成车牌号函数
  20. 画出spi输出bdh数据总线时序图_单片机张毅刚课后习题答案.docx

热门文章

  1. php文档头,头部文档(header.php)
  2. (补)20200105:整数转罗马数字
  3. dataframe 如何增加新的索引_带你领略pandas中多表之间如何处理
  4. 谷歌大脑小姐姐亲授:如何应聘成功羡煞旁人的AI工程师岗位
  5. 北京自动驾驶路测名单更新:蔚来和Pony.ai也获准上路了
  6. 联想高校AI精英挑战赛移师冰城,哈工大上演人工智能创业大秀
  7. 中国“两高”发布司法解释 依法严惩涉地下钱庄犯罪
  8. 计算机网络 - 物理层
  9. 云搜索服务在APP搜索场景的应用
  10. 小程序中的setData的使用