自然数

洛谷P1147 连续自然数和

泄露秘密 提交于 2019-12-01 22:12:11
https://www.luogu.org/problem/P1147 #include<bits/stdc++.h> using namespace std; int main(){ int n,sum; cin>>n; for(int i=1;i<=n/2;i++){ //m可能为奇数 for(int j=i+1;j<=n/2+1;j++){ sum=(i+j)*(j-i+1)/2; if(sum==n) cout<<i<<" "<<j<<endl; if(sum>n) break; //没有这一句会超时 } } return 0; } 来源: https://www.cnblogs.com/QingyuYYYYY/p/11718656.html

P1028 数的计算

风流意气都作罢 提交于 2019-12-01 10:31:43
题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 n n): 先输入一个自然数 n n( n \le 1000 n ≤ 1 0 0 0),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该自然数不能超过原数的一半; 加上数后,继续按此规则进行处理,直到不能再加自然数为止. 输入格式 1 1个自然数 n n( n \le 1000 n ≤ 1 0 0 0) 输出格式 1 1个整数,表示具有该性质数的个数。 输入输出样例 输入 #1 复制 6 输出 #1 复制 6 说明/提示 满足条件的数为 6,16,26,126,36,136 过不了的递归: #include<iostream> using namespace std; const int N = 2000; int n = 0; int cnt = 1; void func(int x){ for(int i = 1;i <= x/2;i++){ cnt ++; func(i); } } int main(){ cin >> n; func(n); cout << cnt; }   第一种解法: f[1]=1 f[2]=2=f[1]+1 f[3]=2=f[1]+1 f[4]=4=f[1]+f[2]+1 f[5]=4=f[1]+f[2]+1 #include<iostream>

P1147 连续自然数和

主宰稳场 提交于 2019-11-30 20:51:34
一开始我是分解的n,求得这一段合法连续自然数的中间,只要存在并且左右不超范围即可,然后忘了连续的为偶数也可以,只要两两配对成就行。 sum(1,n)=(r+l)*(l-r+1)/2; 设k1=(r+l),k2=(l-r+1);l=(k2-k1+1)/2,r=(k1+k2-1)/2; 由此可得k1,k2必须一奇一偶。 #include <iostream> #include <cstdio> #include <cmath> using namespace std; int n; int main(){ scanf("%d",&n); n=2*n; for(int i=sqrt(n);i>=2;i--){ int kk=n/i,ll=n%i; if(ll==0&&(i+kk)%2!=0) printf("%d %d\n",(kk-i+1)/2,(kk+i-1)/2); } return 0; } 来源: https://www.cnblogs.com/jindui/p/11639505.html

51Node ——自然数幂和模板&&拉格朗日插值

笑着哭i 提交于 2019-11-30 04:29:26
伯努利数法 伯努利数原本就是处理等幂和的问题,可以推出 $$ \sum_{i=1}^{n}i^k={1\over{k+1}}\sum_{i=1}^{k+1}C_{k+1}^i*B_{k+1-i}*(n+1)^i $$ 因为 $$\sum_{k=0}^nC_{n+1}^kB_k=0(B_0=1)$$ 所以 $$ B_n={- {1\over{n+1}}}(C_{n+1}^0B_0+C_{n+1}^1B_1+……C_{n+1}^{n-1}B_{n-1})$$ 伯努利数的证明十分复杂,记住即可。 来源: https://www.cnblogs.com/lfri/p/11560023.html

字符串学与练

删除回忆录丶 提交于 2019-11-30 04:18:33
一、常见字符串 二、字符串小练习 (1)设n是一个任意自然数,如果n的各位数字反向排序所得的自然数与n相等,则n被称为回文数,从键盘输入一个5位数字 ,请编写程序判断这个数字是不是回文数。 运行结果: 来源: https://www.cnblogs.com/wt714/p/11558851.html

洛谷P1028 数的计算

痞子三分冷 提交于 2019-11-28 13:16:20
题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 nn n): 先输入一个自然数 nn n( n≤1000n \le 1000 n ≤ 1 0 0 0),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该自然数不能超过原数的一半; 加上数后,继续按此规则进行处理,直到不能再加自然数为止. 输入格式 11 1个自然数 nn n( n≤1000n \le 1000 n ≤ 1 0 0 0) 输出格式 11 1个整数,表示具有该性质数的个数。 输入输出样例 输入 6 输出 6 说明/提示 满足条件的数为 6,16,26,126,36,136 这题用简单递推就可以做出来了(找规律) /* 递推法 举个例n=12 每一轮大循环打印一次数组的结果如下(循环了11次,为1时答案唯一直接存了): 0 1 2 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 0 0 0 0 0 0 0 0 0 1 2 2 4 0 0 0 0 0 0 0 0 0 1 2 2 4 4 0 0 0 0 0 0 0 0 1 2 2 4 4 6 0 0 0 0 0 0 0 1 2 2 4 4 6 6 0 0 0 0 0 0 1 2 2 4 4 6 6 10 0 0 0 0 0 1 2 2 4 4 6 6 10 10 0 0 0 0 1 2 2 4 4 6 6 10 10

为什么 Python 的 Range 要设计成左闭右开?

早过忘川 提交于 2019-11-28 12:20:00
一般来说:表示 2,3,...,12 这一串自然数有以下四种方法: a)2 ≤ i < 13 b)1 < i ≤ 12 c)2 ≤ i ≤ 12 d)1 < i < 13 先说下原因有5点: Mesa(参考文献1)实际应用效果,第一种好; a,b前两种上下边界之和刚好等于数列长度; 表示相邻数列时,前数列的上边界与后边界的下边界相等 ([2,13) 与 [13,15) 相邻或(1,12]和(12,15])) 如果采用b,那在表示自然数时会不自然起来,因为最小的自然数是零,要表示从零开始的数,下边界的数就得是-1,(-1,5] 与第一种方法的 [0,6) 相比,显然a好; 在二分法使用中,区间为[2,8],左右区间为[2,5],[5,8],5多了,算法的结果不准,有的人说可以这样写[2,5],[6,8]。是可以,但是在二分的时候还要对数据做处理才能分区间。 参考链接: https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html https://www.jianshu.com/p/5eaa330788e8 https://www.zhihu.com/question/24883243 来源: https://www.cnblogs.com/benjieqiang/p/11406982.html

自然数的拆分(DFS)

荒凉一梦 提交于 2019-11-27 04:19:35
题目描述: 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。 输入格式: 待拆分的自然数n。 输出格式: 若干数的加法式子。 样例输入: 7 样例输出: 1+1+1+1+1+1+1 1+1+1+1+1+2 1+1+1+1+3 1+1+1+2+2 1+1+1+4 1+1+2+3 1+1+5 1+2+2+2 1+2+4 1+3+3 1+6 2+2+3 2+5 3+4详细的都在代码里了,自己看吧。 1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[41],s; 4 void print(int s) { 5 for(int i=1;i<=s-2;i++)printf("%d+",a[i]); 6 printf("%d\n",a[s-1]); 7 } 8 void search(int n,int s,int pre){ 9 if(n==0 && s>2){ 10 print(s);//打印 11 return;//返回 12 } 13 for(int i=pre;i<=n;i++){ 14 a[s]=i;//每一种 15 search(n-i,s+1,i);//类似于递归,搜索下一种可能,若放满则打印 16 } 17 } 18 int main(){ 19 int n; 20 cin>>n; 21

数论

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-26 19:35:43
以下仅供个人整合资料使用,非本人原创 倍数 对于自然数 a, b,如果存在自然数 k,使得 ka = b,那么 b是 a 的倍数,称 a 整除 b,b 能被 a 整除,记做 a|b 一个数有无穷多个倍数 所有数都是自身和 1 的倍数 倍数具有传递性 在 [1, n] 范围内的 x 的倍数有 ⌊nx⌋个 约数 对于自然数 a, b,如果 b 是 a 的倍数,那么 a 是 b 的约数,又称因数 所有数的约数都包含自身和(或)1 一个自然数只有有限个约数,约数的个数通常记为 d(n) 打个表看看 n 1 2 3 4 5 6 7 8 9 10 d(n) 1 2 2 3 2 4 2 4 3 4 打表 int d[MAXN]; // 计算出 [1, n] 中每个数的约数个数 // 复杂度 O(n log n) void calc_divisors(int n) { for (int i = 1; i <= n; ++i) { // 枚举 i 的所有倍数 for (int j = i; j <= n; j += i) { d[j]++; } } } 素数与合数 如果一个数的约数只有两个(1 和自身),那么称它为素数(或者质数) 如果一个数有非平凡(除了 1 和自身以外)的约数,就称它为合数 1 既不是素数也不是合数! 素性判定: // 判断一个数是否为素数 bool is_prime(int x

极简数学

这一生的挚爱 提交于 2019-11-26 11:03:56
内容简介 《极简数学》将告诉你如何从生活场景中学习数学知识,颠覆了传统的记忆法和套用公式法。作者将数学计算与生活中的场景联系,将看似抽象、复杂的运算用实物表现了出来。利用热气球这个模型,令人头疼的数轴问题便可迎刃而解。这个竖起的数轴比横轴更直观、更管用呢。 数学经常被称为“非常困难”或“非常复杂”的学科,许多人都对它保持“戒备心”。我们在学习数学时,会通过背诵公式和定理,获得解答数学题目的办法。但对于定理和规律的记忆占据主导作用,至于对其是否理解显得并没有那么重要。 然而事实上,理解定理和规律是解题的关键,它不但可以帮助我们打破 解题的瓶颈,而且有利于解决现实中的很多难题。 在这本书中,作者把代数、几何、概率、统计等学科的知识分 解为生活中的场景,我们生活中的每一天都以不同的方式体现这些知识的应用。 作者简介 克里斯 · 韦林,出生于伦敦,中学数学老师,曾出版《我应该知道的数学知识》( I Used to Know That:Maths )、《从0到无穷,数学如何改变了世界》( From 0 to Infinity in 26 Centuries: The Extraordinary Story of Maths )。他的作品生动简洁,深入浅出,深受读者喜爱。 本书内容 序言 在本书的开始,我本可以讲讲数学的应用多么广泛,以及感叹一下数学的重要性。事实的确如此