首页 > 其他分享 >[Violet5]樱花

[Violet5]樱花

时间:2023-08-21 17:05:40浏览次数:32  
标签:樱花 Violet5 begin frac int therefore end aligned

[Violet5]樱花题解

题意概括:

题目意思很明白,输入一个\(int\)类型整数\(n\) ( \(1<=n<=10^6\) ) 求方程 \(\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\) ( \(n!\) 表示 \(n\) 的阶乘,即 \(n!=1\times2\times3\times······\times n\) ) 解的个数

题目分析:

肯定是一个数论题(废话),题目中的方程直接枚举是 \(O(n^3)\) 的时间复杂度,绝对会 \(TLE\) ,那么就只能用魔法打败魔法,用math知识对方程进行分析:

\[\begin{aligned} & \frac{1}{x} + \frac{1}{y} = \frac{1}{n!}\\ & 设 n!=k,\\ \end{aligned} \]

第一眼看上去,\(x\) 和 \(y\) 都是一次的整数,只有 \(n!\) 是一个式子,所以用一个未知数代替,方便运算和思考。其实就是我懒对原方程进行化简,我习惯把 \(x\) 当作主元,用 \(y\) 也可以。把 \(y\) 和 \(k\) 当作一个常数,用解普通方程的步骤去解。

\[\begin{aligned} & \therefore \frac{1}{x} + \frac{1}{y} = \frac{1}{k}\\ & \frac{1}{x} = \frac{1}{k} - \frac{1}{y}\\ & \frac{1}{x} = \frac{y}{ky} - \frac{k}{ky}\\ & \frac{1}{x} = \frac{y-k}{ky}\\ & x = \frac{ky}{y-k}\\ \end{aligned} \]

这时,无法对方程继续化简,但分式上下都有 \(y\) 和 \(k\) ,所以可以考虑再设一个关于 \(y\) 和 \(k\) 的未知数,去表达 \(y\) 和 \(k\) 的关系。

\[\begin{aligned} & 设 y-k = p,\\ & \therefore y = k + p\\ \end{aligned} \]

找到之后,就可以把 \(y=k+p\) 代入方程,得到

\[\begin{aligned} & \therefore x = \frac{k(k+p)}{p}\\ & \therefore x = k+\frac{k^2}{p}\\ \end{aligned} \]

解出 \(x\) 的值后,观察式子,发现可以运用文化课上讲过的整数的性质,

\[\begin{aligned} & \because x,k=n!为正整数\\ & \therefore p \mid k^2\\ & \therefore y-n! \mid (n!)^2\\ & \therefore (y-n!) 为(n!)^2的因子\\ & \therefore (y-n!) 为n!的因子\\ & \because y,n!为正整数\\ & \therefore x为正整数\\ & \therefore 只要(y-n!)为n!的因子,就有原方程的一组解\\ \end{aligned} \]

通过分析,就可以把原问题转化为求\(n!\)的因子数

代码实现

由唯一分解定理,我们只需要解出n!的质因数,balabala的一个埃氏筛函数

int primes[1000005];//记录质因数
bool st[1000005];//标记是否为质数
int cnt;
int n;
long long ans=1;
void prime_set(int n){
    st[1]=1;
    for (int i=2;i<=n;i++){
        if (!st[i])
            primes[++cnt]=i;
        for (int j=1;j<=cnt&&primes[j]*i<=n;j++){
            st[primes[j]*i]=1;
            if (i%primes[j]==0){
                break;
            }
        }
    }
}

通过唯一分解定理的另一个公式,即
\(n的因子数=\prod\limits_{i=0}^{质因子个数}质因子i的个数+1\)
就可以得到答案了

prime_set(n);
for (int i = 1; i <= cnt; i++){
    int s = 0;
    for (int j=n;j;j/=primes[i]){
        s+=j/primes[i];
    }
    ans=1ll*ans*(s<<1|1)%P;//1ll用来防止数据溢出
}
printf("%lld",ans);

Code

#include<bits/stdc++.h>
#define P 1000000007
using namespace std;
int primes[1000005];
bool st[1000005];
int cnt;
int n;
long long ans=1;
void prime_set(int n){
    st[1]=1;
    for (int i=2;i<=n;i++){
        if (!st[i])
            primes[++cnt]=i;
        for (int j=1;j<=cnt&&primes[j]*i<=n;j++){
            st[primes[j]*i]=1;
            if (i%primes[j]==0){
                break;
            }
        }
    }
}
int main(){
    scanf("%d",&n);
    prime_set(n);
    for (int i = 1; i <= cnt; i++){
        int s = 0;
        for (int j=n;j;j/=primes[i]){
            s+=j/primes[i];
        }
        ans=1ll*ans*(s<<1|1)%P;
    }
    printf("%lld",ans);
    return 0;
}

标签:樱花,Violet5,begin,frac,int,therefore,end,aligned
From: https://www.cnblogs.com/z10h09x11/p/17646513.html

相关文章

  • java绘制樱花
    如何用Java绘制樱花作为一名经验丰富的开发者,我很高兴能够教会你如何用Java绘制樱花。在本文中,我将向你展示实现这个目标的步骤,并提供每一步所需的代码和注释。整体流程绘制樱花的过程可以分为以下几个步骤:步骤描述1创建一个绘图区域2绘制树干3绘制花瓣4......
  • P1833 樱花 题解
    二进制拆分做法:把每一个物品根据2的多少次方拆分,因为任何数都可以转化为二进制数核心思想:把每一个物品拆成很多个,分别计算价值和所需时间,再转化为01背包求解最后一点:完全背包可以把他的空间记为999999,不要太大,一般百万就足够了还有一点:cin和scanf不可以混用代码#include<bit......
  • 爬取 2 万多张 Flickr 图片,莫纳什大学复现 10 年间日本樱花开放的时空特征
    内容一览:近年来,全球气候变化形势严峻,由此引发的蝴蝶效应,正深刻地影响着人类和大自然。在这一背景下,收集数百甚至数千公里范围内开花模式的数据,了解气候变化如何对开花植物产生影响,成为近年来生态研究的重要课题之一。但传统的方法通常需要耗费大量经费,且需要较长的时间进行采样调查......
  • 樱花
    樱花给定一个整数$n$,求有多少正整数数对$(x,y)$满足$\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}$。输入格式一个整数$n$。输出格式一个整数,表示满足条件的数对数量。......
  • python实现樱花动漫自动追番功能
    源码地址https://gitee.com/kidtic/autodmhy准备1.网络代理2.比特彗星打开远程下载功能3.按照以下文件目录设置好dmhyKeyWord.txt文件xxx动漫1/dmhyKey......
  • 浪漫3D樱花漫天飞舞特效【附源码】
    ​​13MB动态图片​​主要技术和工具:html+css功能截图:浪漫,特效项目结构......
  • [WordPress] 主题美化 樱花背景+灯笼特效+鼠标样式 [持续更新]
    樱花背景黑白主题适配//樱花背景特效<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"......
  • Python绘图之樱花树
    利用分形绘制樱花树,代码来自网络。fromturtleimport*fromrandomimport*frommathimport*deftree(n,l):pd()#下笔#阴影效果t=cos(radians(h......
  • 【HEOI2015】兔子与樱花(贪心)
    首先想一下题目中的操作如何转化:当一个节点被去掉之后,这个节点上的樱花和它的儿子节点都被连到删掉节点的父节点上。设当前节点为\(u\),\(u\)的父节点为\(fa\),儿子个......
  • 【python】待君有余暇,看春赏樱花,这不得来一场浪漫的樱花旅~
    ......