首页 > 其他分享 >koishi的数学题

koishi的数学题

时间:2023-10-21 14:35:11浏览次数:42  
标签:lfloor right cdot dfrac rfloor 数学题 koishi left

koishi的数学题

题目描述

Koishi 在 Flandre 的指导下成为了一名数学大师,她想了一道简单的数学题。

输入一个整数 $n$,设 $\displaystyle f(x) = \sum_{i=1}^n x \bmod i$,你需要输出 $f(1), f(2), \ldots , f(n)$。

按照套路,Koishi 假装自己并不会做这道题,就来求你帮忙辣。

输入格式

一个正整数 $n$。

输出格式

一行用空格分隔的 $n$ 个整数 $f(1), f(2), \ldots , f(n)$。

样例 #1

样例输入 #1

10

样例输出 #1

9 16 22 25 29 27 29 24 21 13

提示

对于 $20\%$ 的数据,$n \le 1000$。  
对于 $60\%$ 的数据,$n \le 10^5$。  
对于 $100\%$ 的数据,$1 \le n \le 10^6$。

 

解题思路

  这几天在洛谷跳题,结果很多不会做qwq。

  对于 $x \bmod i$,关键是要想到可以转换为 $x - \left\lfloor \dfrac{x}{i} \right\rfloor \cdot i$,因此就有

\begin{align*}
f(x) &= \sum\limits_{i=1}^{n}{x \bmod i} \\
&= \sum\limits_{i=1}^{n}{x - \left\lfloor \dfrac{x}{i} \right\rfloor \cdot i} \\
&= n \cdot x - \sum\limits_{i=1}^{n}{\left\lfloor \dfrac{x}{i} \right\rfloor \cdot i}
\end{align*}

  接下来可以考虑递推,假设我们已经知道了 $f(x)$ 中 $\sum\limits_{i=1}^{n}{\left\lfloor \dfrac{x}{i} \right\rfloor \cdot i}$ 这部分的结果,考虑能否推出 $\sum\limits_{i=1}^{n}{\left\lfloor \dfrac{x+1}{i} \right\rfloor \cdot i}$ 的结果。分以下两种情况考虑:

  1. $x \bmod i < i - 1$:那么有 $\left\lfloor \dfrac{x+1}{i} \right\rfloor \cdot i = \left\lfloor \dfrac{x}{i} \right\rfloor \cdot i$。
  2. $x \bmod i = i - 1$:那么有 $\left\lfloor \dfrac{x+1}{i} \right\rfloor \cdot i = \left(\left\lfloor \dfrac{x}{i} \right\rfloor + 1 \right) \cdot i = \left\lfloor \dfrac{x}{i} \right\rfloor \cdot i + i$。

  即如果 $i$ 是 $x+1$ 的约数,那么 $\left\lfloor \dfrac{x+1}{i} \right\rfloor \cdot i$ 就会比 $\left\lfloor \dfrac{x}{i} \right\rfloor \cdot i$ 多出 $i$,否则相等。因此对于整个 $\sum\limits_{i=1}^{n}{\left\lfloor \dfrac{x+1}{i} \right\rfloor \cdot i}$ 的结果,就会比 $\sum\limits_{i=1}^{n}{\left\lfloor \dfrac{x}{i} \right\rfloor \cdot i}$ 多出 $x+1$ 的约数和。

  所以对于 $x \in [1,n]$,我们可以对每个 $x$ 的分解约数求约数和,但这样的时间复杂度为 $O(n \sqrt{n})$。为此我们可以反过来枚举约数 $i \in [1,n]$,再枚举所有不超过 $n$ 的 $i$ 的倍数 $j$,那么这些 $j$ 的都含有约数 $i$,时间复杂度就是 $O(\sum\limits_{i=1}^{n}{\frac{n}{i}}) \approx O(n \log{n})$。

  AC 代码如下:

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

const int N = 1e6 + 10;

LL s[N];

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j += i) {
            s[j] += i;
        }
    }
    LL last = 0;
    for (int i = 1; i <= n; i++) {
        printf("%lld ", 1ll * i * n + last - s[i]);
        last -= s[i];
    }
    
    return 0;
}

 

参考资料

  题解 P3708 【koishi的数学题】:https://www.luogu.com.cn/blog/asuldb/solution-p3708

标签:lfloor,right,cdot,dfrac,rfloor,数学题,koishi,left
From: https://www.cnblogs.com/onlyblues/p/17778915.html

相关文章

  • 用程序解决数学题:小马虎在计算123乘一个一位数时,把123错看成128,所得的结果比正确的结
    小马虎在计算123乘一个一位数时,把123错看成128,所得的结果比正确的结果大20,正确的结果是什么?internalclassProgram{staticvoidMain(string[]args){//小马虎在计算123乘一个一位数时,把123错看成128,//所得的结果比正确的结果大20,正确的结果是什......
  • 一些有趣的组合数学题
    Problem1题意:从\(S=\{1,2,\dots,200\}\)中选出一个集合\(T\),其中\(|T|=100\)且\(\displaystyle\min_{i=1}^{100}T_i<16\),证明对于任意的\(T\)都存在\(i,j\)满足\(1\leqi,j\leq100\),\(i\neqj\)且\(T_i\bmodT_j=0\)。......
  • 数学题-位运算-2791. 树中可以形成回文的路径数
    2791.树中可以形成回文的路径数DescriptionDifficulty:困难RelatedTopics:位运算,树,深度优先搜索,动态规划,状态压缩给你一棵树(即,一个连通、无向且无环的图),根节点为0,由编号从0到n-1的n个节点组成。这棵树用一个长度为n、下标从0开始的数组parent表......
  • POJ 2109 Power of Cryptography 数学题 double和float精度和范围
    PowerofCryptographyTimeLimit:1000MSMemoryLimit:30000KTotalSubmissions:21354Accepted:10799DescriptionCurrentworkincryptographyinvolves(amongotherthings)largeprimenumbersandcomputingpowersofnumbersamongtheseprimes.Workint......
  • 简单的数学题
    简单的数学题\[\Sigma_{i=1}^{n}\Sigma_{j=1}^{n}ijgcd(i,j)\,\,\,\,n\leqslant1e10\]正常莫反\[\Sigma_{d=1}^{n}\Sigma_{i=1}^{\lfloor{\frac{n}{d}}\rfloor}\Sigma_{j=1}^{\lfloor{\frac{n}{d}}\rfloor}ij[gcd(i,j)==1]\]\[\Sigma_{d=......
  • Python解数学题
    【Python解决数学问题]用Python解方程】父亲和儿子今年共有60岁,又知4年前,父亲的年龄正好是儿子的3倍,儿子今年是多少岁?1.在Mu下载第三方库2.方程在数学中是什么方程(equation)是指含有未知数的等式。是表示两个数学式(如两个数、函数、量、运算)之间相等关系的一种等式,使等式成立......
  • 马克思手稿中的数学题
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>main(){ intx,y,z,number=0; printf("MenWomenChildren\n"); /*将变量x的可能取值依次代入方程组*/ for(x=0;x<=10;x++) { y=20-2*x; /*当x一定时,可确定y*/ z=30-x-y; /*当x......
  • Light oj 1245 【数学题】
    1245-HarmonicNumber(II)PDF(English)StatisticsForumTimeLimit: 3second(s)MemoryLimit: 32MBIwastryingtosolveproblem '1234-HarmonicNumber',IwrotethefollowingcodelonglongH(intn){longlongres=0;for(......
  • 马克思手稿中的数学题
    1.问题描述马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,他们在同一家饭馆吃饭,总共花了50先令。已知每个男人吃饭需要花3先令,每个女人吃饭需要花2先令,每个小孩吃饭需要花1先令,请编程求出男人、女人和小孩各有几人。2.问题分析根据该问题的描述,可将该问题抽象为一......
  • 20.马克思手稿中的数学题
       #include<stdio.h>intmain(){intx,y,z,number=0;printf("MenWomenChildren\n");for(x=0;x<=10;x++){y=20-2*x;z=30-x-y;if(3*x+2*y+z==50)printf("%2d:%4d%5d%6d\n",++number,x,y,z);}return0;}......