题目描述

原题来自:HackerRank Equations

求不定方程:

1/x+1/y=1/n!

的正整数解 (x,y) 的数目。

输入格式

一个整数 n 。

输出格式

一个整数,表示有多少对 (x,y) 满足题意。答案对 1e9+7 取模。

样例

样例输入

2

样例输出

3

样例说明

共有三个数对 (x,y) 满足条件,分别是 (3,6),(4,4) 和 (6,3)。

数据范围与提示

对于 30% 的数据,n<=100;
对于全部数据,n<=1e6。

___________________________________________________________________

数论题,关键一步真的想不到!

由于题目是正整数解,所以x,y都大于n

题目很容易化为n!=xy/(x+y)

由于x,y大于n!。所以x设为n!+a,y设为n!+b。

上面的式子就可以化为(n!)^2=a*b

也就是上面的式子,a,b有多少中解!

所以,首先求出n中的质数,然后求出所有的质数在n!中出现的次数,而(n!)^2中的后的质数的个数要乘以2,让后就是求所有因数的个数。

___________________________________________________________________

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1e6;
4 int n;
5 int prime[maxn],cnt[maxn];
6 bool sz[maxn];
7 int js;
8 void getprime(int n)
9 {
10 sz[0]=sz[1]=1;
11 for(int i=2;i<=n;++i)
12 {
13 if(sz[i]==0)prime[js++]=i;
14 for(int j=0;j<js&&prime[j]*i<=n;++j)
15 {
16 sz[prime[j]*i]=1;
17 if(i%prime[j]==0)break;
18 }
19 }
20 }
21 void fenjie(int x)
22 {
23 for(int i=0;prime[i]*prime[i]<=x;++i)
24 while(x%prime[i]==0)
25 {
26 x/=prime[i];
27 cnt[prime[i]]++;
28 }
29 if(x!=1)cnt[x]++;
30 }
31 long long ans=1;
32 int main()
33 {
34 cin>>n;
35 getprime(n);
36 for(int i=2;i<=n;++i)fenjie(i);
37 for(int i=2;i<=n;++i)ans=(ans*((cnt[i]<<1)+1))%1000000007;
38 cout<<ans;
39 return 0;
40 }

LOJ10202樱花——数论的更多相关文章

  1. Luogu1445 [Violet]樱花 ---- 数论优化

    Luogu1445 [Violet]樱花 一句话题意:(本来就是一句话的) 求方程 $\frac{1}{X} + \frac{1}{Y} = \frac{1}{N!}$ 的正整数解的组数,其中$N \ ...

  2. 【bzoj2721】[Violet 5]樱花 数论

    题目描述 输入 输出 样例输入 2 样例输出 3 题解 数论 设1/x+1/y=1/m,那么xm+ym=xy,所以xy-xm-ym+m^2=m^2,所以(x-m)(y-m)=m^2. 所以解的数量就是 ...

  3. bzoj 2721[Violet 5]樱花 数论

    [Violet 5]樱花 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 671  Solved: 395[Submit][Status][Discuss ...

  4. 【BZOJ2721】樱花(数论)

    [BZOJ2721]樱花(数论) 题面 BZOJ 题解 先化简一下式子,得到:\(\displaystyle n!(x+y)=xy\),不难从这个式子中得到\(x,y\gt n!\). 然后通过\(x ...

  5. 「BZOJ2721」「LuoguP1445」 [Violet]樱花(数论

    题目背景 我很愤怒 题目描述 求方程 $\frac{1}{x}+\frac{1}{y}=\frac{1}{N!}$ 的正整数解的组数,其中$N≤10^6$. 解的组数,应模$1e9+7$. 输入输出格 ...

  6. 2018.10.26 bzoj2721: [Violet 5]樱花(数论)

    传送门 推一波式子: 1x+1y=1n!\frac 1 x+\frac 1 y=\frac 1 {n!}x1​+y1​=n!1​ =>xy−x∗n!−y∗n!xy-x*n!-y*n!xy−x∗n ...

  7. BZOJ2721 Violet5樱花(数论)

    有(x+y)n!=xy.套路地提出x和y的gcd,设为d,令ad=x,bd=y.则有(a+b)n!=abd.此时d已是和a.b无关的量.由a与b互质,得a+b与ab互质,于是将a+b除过来得n!=ab ...

  8. 【数论】[因数个数]P4167樱花

    题目描述 求不定方程 \(\frac {1}{x} + \frac{1}{y} = \frac{1}{n!}\)的正整数解的个数 \(n \leq 100^6\) Solution 化简得 \(x * ...

  9. bzoj2721 [Violet5]樱花

    bzoj2721 [Violet 5]樱花 给出 \(n\) 求 \(\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\) 的正整数解数量 \(\bmod (10^9+7)\) ...

随机推荐

  1. java中游标

    package YouBiao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Resu ...

  2. [leetcode]109. Convert Sorted List to Binary Search Tree链表构建二叉搜索树

    二叉树的各种遍历方式都是可以建立二叉树的,例如中序遍历,就是在第一步建立左子树,中间第二步建立新的节点,第三步构建右子树 此题利用二叉搜索树的中序遍历是递增序列的特点,而链表正好就是递增序列,从左子树 ...

  3. 简述java多态

    一.多态性: 1.java实现多态的前提:继承.覆写: 2.覆写调用的前提:看new是哪个类的对象,而后看方法是否被子类覆写,若覆写则调用覆写的方法,若没覆写则调用父类的方法: 二.多态性组成: 1方 ...

  4. 仿小米logo案例

    效果:做一个具有logo能过渡切换效果,类似于小米网站的logo 思路:将两个用于切换的logo以文字形式嵌入活动块banner的左右半,活动块banner的上级是主展示块box,初态只展示右半log ...

  5. String StringBuffer StringBuilder之间的区别

    String:

  6. 1001 害死人不偿命的(3n+1)猜想 (15分)

    卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...

  7. Flutter 应用入门:计数器

    用Android Studio创建的Flutter应用模板默认是一个简单的计数器示例. // 导入包 import 'package:flutter/material.dart'; // 应用入口,启 ...

  8. 搭乘“AI大数据”快车,肌肤管家,助力美业数字化发展

    经过疫情的发酵,加速推动各行各业进入数据时代的步伐.美业,一个通过自身技术.产品让用户变美的行业,在AI大数据的加持下表现尤为突出. 对于美妆护肤企业来说,一边是进入存量市场,一边是疫后的复苏期,一边 ...

  9. 在Linux系统下限制指定目录的大小以及文件/文件夹数量

    背景说明 在Linux操作系统下有时需要限制一个指定文件夹的大小和文件夹内可存储的文件数量,有可能是出于安全的考量或者定制化的配置,这里我们提供了一种方案:用dd创建一个空的img镜像,进行格式化的配 ...

  10. Java并发包源码学习系列:ReentrantReadWriteLock读写锁解析

    目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writ ...