ACM必做50题的解题-数论
ACM中数论基础知识的运用
数论初步:一,整除与因式分解:1,算术基本定理: n =a1^r1*a2^r2*a3^r3……2,求素数:(试除法,筛选法):素数测试费马小定理:若p为素数,则对于任意小于p的正整数a,有a(p-1)≡1(mod p)证明:用欧拉定理直接得出二次探测定理:若p为素数,a2≡1(mod p)小于p的正整数解只有1和p-1满足费马小定理和二次探测定理的数可以确定是素数Miller-Rabin算法算法步骤:判定n是否为素数令n-1=m*2j,m为奇数随机在2到(n-1)之间取一个整数b令v=bm,之后每次对v平方,当v=1时,若上一次的v既不是1也不是(n-1),由二次探测定理,n不是素数,退出;不断循环直到计算出b(n-1)v=1,满足费马小定理,通过测试;否则n一定不是素数 选取几个不同的b多次测试Miller-Rabin只能算一种测试,因为通过测试的数不一定是素数,非素数通过测试的概率是1/4虽然一次测试的结果不一定令人满意,但五六次随机测试基本可以保证正确率超过99.9%For (int i = 2; i < n ;i++){For (int j = 2,flay = 1; j < sqrt (n); j++)If (I % j == 0){Printf (“i不是素数”);flay = 0;}Printf (“I是素数”);}3 ,int m = sqrt (n+0.5);int c = 0;memset (vis,0,sizeof (vis));for (int i = 2; i < = m; i++)if (!vis[i]){prime[c++] = i;for (int j = i*i; j <= n; j+= i) vis[j] = 1;}4,int isprime[N];int cnt;int isok (int x){for(int i = 0; i < cnt && isprime[i] * isprime[i] <= x; i++)if (x % isprime[i] == 0) return 0;return 1;}void getprime (){isprime[0] = 2;isprime[1] = 3;cnt = 2;for (int i = 5; i < maxn; i++)if (isok (i))isprime[cnt++] = i;}5,因式分解:int Factor (int num){int m = 0;for (int i = 0; i < cnt && isprime[i]*isprime[i] <= num; i++){if (num%isprime[i] == 0){arr[++m] = isprime[i];r[m] = 0;while (num % isprime[i] == 0 && num){r[m]++;num/= isprime[i];}}}if (num > 1){arr[++m] = num;r[m] = 1;}return m;}6,求约数:void dfs (int now,int q,int m,int a,int b){if (flay) return ;if (q > a) return ;if (now == m+1){q 就是约数…..return ;}for (int i = 0,t = 1;i <= r[now];i++,t*=arr[now]){dfs (now+1,q*t,m,a,b);}}例题分析:Fzu上的题:()求一个数的真因子个数(不包括本身)。
(2020年编辑)ACM必做50题的解题-数论
poj 1061 青蛙的约会这题用的是解线性同余方程的方法,之前没接触到过,搜索资料后看到一个人的博客里面讲的很好就拷贝过来了。
内容如下:对于方程:ax≡b(mod m),a,b,m都是整数,求解x 的值,这个就是线性同余方程。
符号说明:mod表示:取模运算ax≡b(mod m)表示:(ax - b) mod m = 0,即同余gcd(a,b)表示:a和b的最大公约数求解ax≡b(mod n)的原理:对于方程ax≡b(mod n),存在ax + by = gcd(a,b),x,y是整数。
而ax≡b(mod n)的解可以由x,y来堆砌。
具体做法如下:第一个问题:求解gcd(a,b)定理一:gcd(a,b) = gcd(b,a mod b)欧几里德算法int Euclid(int a,int b){if(b == 0)return a;elsereturn Euclid(b,mod(a,b));}附:取模运算int mod(int a,int b){if(a >= 0)return a % b;elsereturn a % b + b;}第二个问题:求解ax + by = gcd(a,b)定理二:ax + by = gcd(a,b)= gcd(b,a mod b) = b * x' + (a mod b) * y'= b * x' + (a - a / b * b) * y'= a * y' + b * (x' - a / b * y')= a * x + b * y则:x = y'y = x' - a / b * y'以上内容转自/redcastle/blog/item/934b232dbc40d336349bf7e4.html由这个可以得出扩展的欧几里德算法:int exGcd(int a, int b, int &x, int &y) {if(b == 0){x = 1;y = 0;return a;}int r = exGcd(b, a % b, x, y);int t = x;x = y;y = t - a / b * y;return r;}代码:#include<iostream>#include<cstdlib>#include<cstring>#include<cmath>using namespace std;__int64 mm,nn,xx,yy,l;__int64 c,d,x,y;__int64 modd(__int64 a, __int64 b){if(a>=0)return a%b;elsereturn a%b+b;}__int64 exGcd(__int64 a, __int64 b) {if(b==0){x=1;y=0;return a;}__int64 r=exGcd(b, a%b);__int64 t=x;x=y;y=t-a/b*y;return r;}int main(){scanf("%I64d %I64d %I64d %I64d %I64d",&xx,&yy,&mm,&nn,&l);if(mm>nn) //分情况{d=exGcd(mm-nn,l);c=yy-xx;}else{d=exGcd(nn-mm,l);c=xx-yy;}if(c%d != 0){printf("Impossible\n");return 0;}l=l/d;x=modd(x*c/d,l); ///取模函数要注意printf("%I64d\n",x);system("pause");return 0;}POJ 1142 SmithNumber题意:寻找最接近而且大于给定的数字的SmithNumber什么是SmithNumber?用sum(int)表示一个int的各位的和,那一个数i如果是SmithNumber,则sum(i) =sigma( sum(Pj )),Pj表示i的第j个质因数。
50道经典的编程题
【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
【程序3】题目:打印出1000以内所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
【程序4】题目:将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为'\n'.【程序8】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
ACM数论方面十道基础题目详解
{
a=n-m;
b=l;
c=x-y;
r=gcd(a,b);
if(c%r)
{
printf("Impossible\n");
continue;
}
a/=r;
b/=r;
c/=r;
exgcd(a,b,k1,k2);
直接给出>
main()
{
int a,b,c,n;
scanf("%d%d%d",&a,&b,&c);
for(n=11;n<100;n++)
if(n%3==a&&n%5==b&&n%7==c)
printf("%d\n",n);
}
中国剩余定理思路代码:
inline int Gcd(int m,int n) //求最大公约数
{
if (m==0) return n;
return Gcd(n%m,m);
}
int main()
{
int n,a,b,g;
cin>>n;
while(n--)
{
cin>>a>>b;
g=Gcd(a,b);
cout<<g<<" "<<a*b/g<<endl;
if(n<=0)
n+=21252;
printf("%d\n",n);
ACM入门简单数学题
2019/9/3
28
请自己仔细分析...
哪位同学做个陈述?
2019/9/3
29
课后任务:
完成在线练习:
201309《ACM程序设计》作业(2)—— 刘春英 老师
特别提醒:
作业务必尽力完成(第一次的作 业尚未完成的,一定要补上~)
作业密码:helloworld
return 0;}Fra bibliotek2019/9/3
23
HDOJ_1005: Number Sequence
2019/9/3
24
Question:
暴力(Brute-Force) 能解决问题吗?
2019/9/3
25
题目分析:
对于这种题目,千万不能蛮干!实际上, 有经验的同学看到本题目的数据规模,很快就 能知道:这类题目有规律可循。
STD-O 56 5
STD-O ?6
TMP-O 55
TMP-O ??
2019/9/3
9
有什么问题呢?
享受今天的慢车旅程吧~~
2019/9/3
10
HDOJ_1008: Elevator
2019/9/3
11
题目评述:
这是2004浙江省赛最简单的一题,当时训练 水平相对较高的学校基本上10分钟之内解决该 题,这是一个没有算法的简单模拟题目。
参知政事范仲淹等人遭谗离职,欧阳修上书替他们分辩,被贬到滁州做了两年知州。到任以后,他内心抑郁,但还能发挥“宽简而不扰”的作风,取得了某些政绩。《醉翁亭记》就是在这个时期写就的。目标导学二:朗读文章,通文顺字1.初读文章,结合工具书梳理文章字词。2.朗读文章,划分文章节奏,标出节奏划分有疑难的语句。节奏划分示例
ACM-数论
a b m (mod ) d d d
公约数、公倍数及互素
定义: 公约数,亦称“公因数”。如果一个整数同时是几个整数的 约数,称这个整数为它们的“公约数”;公约数中最大的 称为最大公约数(Greatest Common Divisor 缩写G.C.D )。
性质4 设p为素数且p|ab,则p|a或p|b 定理2(唯一分解定理)任一自然数n皆可唯一表为素数之 积
ak a1 a2 n p1 p2 ... pk
p1 p2 ... pk 为素数,a1 , a2 ,
, ak 为自然数
几个数论函数
函数[x]
设x是实数,不大于x的最大整数称为x的整数部分,记为[x];x-[x] 称为x的小数部分,记为{x}。 性质:若p a || n !,则a [ n ] [ n2 ] [ n3 ] ...
又35 243 250-7 -7(mod 50),于是
26 5 2 (25733 +46) (35) 3 (-7)5 3 (72) 7 3 21 29(mod 50)
注意到0 29 50,所以29就是所求余数
事实上,a k 1(mod m)时, 对于大的指数n,利用带余除法定理,可得n=kq+r, 0 r k,于是有 a n a kq r (a k ) q a r a r (mod m)
应用
性质1给出了一种将整除关系转变为同余式的法则
a ≡b(mod m) ←→ a-b ≡0(mod m) ←→ m | a-b
ACM题——精选推荐
(2)奇数阶魔方Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 538 Accepted Submission(s): 311Problem Description一个n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方。
n为奇数时我们有1种构造方法,叫做“右上方”,例如下面给出n=3,5,7时的魔方.38 1 63 5 74 9 2517 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9730 39 48 1 10 19 2838 47 7 9 18 27 2946 6 8 17 26 35 375 14 16 25 34 36 4513 15 24 33 42 44 421 23 32 41 43 3 1222 31 40 49 2 11 20第1行中间的数总是1,最后1行中间的数是n^2,他的右边是2,从这三个魔方,你可看出“右上方”是何意。
Input包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(3<=n<=19)是奇数。
Output对于每组数据,输出n阶魔方,每个数占4格,右对齐Sample Input235Sample Output8 1 63 5 74 9 217 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9(5)毕业bgTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2967 Accepted Submission(s): 1086Problem Description每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为“bg”。
step1-数论 程序设计基础题ACM
目录数A01 敲七 (1)数A02 三角形面积 (2)数A03 3n+1数链问题 (3)数A04 统计同成绩学生人数 (4)数A05 分解素因子 (5)数A06 亲和数 (6)数B01 寒冰王座 (7)数B02 整数对 (8)数B03 麦森数 (9)数B04 Feli的生日礼物 (10)注:数表示本题属于初等数论,A表示简单,B表示稍难。
数A01 敲七【问题描述】输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)【数据输入】一个整数N。
(N不大于30000)【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。
【样例输入】20【样例输出】71417数A02 三角形面积【问题描述】给出三角形的三个边长为a,b,c,根据海伦公式来计算三角形的面积:s = (a+b+c)/2;area = sqrt(s*(s-a)*(s-b)*(s-c));【数据输入】测试的数据有任意多组,每一组为一行。
每一行为三角形的三个边长为a,b,c;【数据输出】输出每一个三角形的面积,两位小数。
如果不是一个三角形,则输出错误提示信息:“Input error!”【样例输入】3 4 56 8 101 2 3【样例输出】6.0024.00Input error!数A03 3n+1数链问题【问题描述】在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。
然而,在很多情况我们并不知道哪一类问题可以解决,那一类问题不可解决。
现在我们就有这样一个问题,问题如下:1. 输入一个正整数n;2. 把n显示出来;3. 如果n=1则结束;4. 如果n是奇数则n变为3n+1 ,否则n变为n/2;5. 转入第2步。
例如对于输入的正整数22,应该有如下数列被显示出来:22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1我们推测:对于任意一个正整数,经过以上算法最终会推到1。
ACM竞赛之简单数论
THANKS
感谢观看
欧拉函数及其应用
总结词
欧拉函数是一个用于描述一个数与它的正因数之间关系的函 数,它在示一个数n的正因数的个数,特别地,如果n是一 个质数,那么欧拉函数(n)的值为2。在ACM竞赛中,欧拉函 数常常用于解决一些与数的因数和因子分解相关的问题。
05
数论中的经典题目解析
最小。
数论应用
利用数论中的欧拉路径和欧拉回路 的知识,通过贪心算法和动态规划 解决最小生成树问题。
算法设计
通过数学推导和归纳,将问题转化 为数论中的数学问题,利用数论中 的结论和公式求解。
04
数论中的数学问题
费马小定理及其应用
总结词
费马小定理是数论中的一个重要定理,它提供了一种判断一个数是否为质数的 方法。
7等。
合数:一个大于1的自然 数,除了1和它本身外, 还有其他自然数能够整 除它的数。例如:4、6
、8、9等。
1既不是质数也不是合数 。
最大公约数与最小公倍数
01
最大公约数
两个或多个整数共有的最大的正 整数约数。
02
最小公倍数
两个或多个整数的最小的公倍数。
03
最大公约数与最小 公倍数的关系
两数的乘积等于它们的最大公约 数与最小公倍数的乘积。
输标02入题
中国剩余定理的基本思想是将一个线性同余方程组转 化为若干个简单的线性同余方程,然后分别求解,最 后再通过一定的方法得到原方程组的解。
01
03
中国剩余定理的应用范围很广,不仅在数论中有广泛 应用,在其他数学领域和计算机科学中也有很多应用。
04
在应用中国剩余定理时,需要先对方程组进行整理和 化简,然后选取适当的模数使得方程组满足中国剩余 定理的条件。
ACM常见算法
ACM常见算法ACM算法⼀、数论算法 1.求两数的最⼤公约数 2.求两数的最⼩公倍数 3.素数的求法 A.⼩范围内判断⼀个数是否为质数: B.判断longint范围内的数是否为素数(包含求50000以内的素数表):⼆、图论算法1.最⼩⽣成树A.Prim算法:B.Kruskal算法:(贪⼼) 按权值递增顺序删去图中的边,若不形成回路则将此边加⼊最⼩⽣成树。
2.最短路径 A.标号法求解单源点最短路径: B.Floyed算法求解所有顶点对之间的最短路径: C. Dijkstra 算法:3.计算图的传递闭包4.⽆向图的连通分量 A.深度优先 B 宽度优先(种⼦染⾊法)5.关键路径⼏个定义:顶点1为源点,n为汇点。
a. 顶点事件最早发⽣时间Ve[j], Ve [j] = max{ Ve [j] + w[I,j] },其中Ve (1) = 0; b. 顶点事件最晚发⽣时间 Vl[j], Vl [j] = min{ Vl[j] – w[I,j] },其中 Vl(n) = Ve(n); c. 边活动最早开始时间 Ee[I], 若边I由<j,k>表⽰,则Ee[I] = Ve[j]; d. 边活动最晚开始时间 El[I], 若边I由<j,k>表⽰,则El[I] = Vl[k] – w[j,k]; 若 Ee[j] = El[j] ,则活动j为关键活动,由关键活动组成的路径为关键路径。
求解⽅法: a. 从源点起topsort,判断是否有回路并计算Ve; b. 从汇点起topsort,求Vl; c. 算Ee 和 El;6.拓扑排序找⼊度为0的点,删去与其相连的所有边,不断重复这⼀过程。
例寻找⼀数列,其中任意连续p项之和为正,任意q 项之和为负,若不存在则输出NO.7.回路问题 Euler回路(DFS) 定义:经过图的每条边仅⼀次的回路。
(充要条件:图连同且⽆奇点) Hamilton回路定义:经过图的每个顶点仅⼀次的回路。
ACM必做50题的解题-数学
ACM必做50题的解题-数学.txt36母爱是一缕阳光,让你的心灵即便在寒冷的冬天也能感受到温暖如春;母爱是一泓清泉,让你的情感即使蒙上岁月的风尘仍然清澈澄净。
POJ 2249 Binomial Showdown组合数学。
高精度,也可把分子分母的数组进行两两约分#include<iostream>using namespace std;double c(int c,int k){double a=1;int i,j=2;for(i=c;i>c-k;i--)a=a*i/(c-i+1);return a;}int main(){int n,k;while(scanf("%d%d",&n,&k)!=EOF && (n!=0 || k!=0)){if(k>n/2 )k=n-k;printf("%.0lf\n",c(n,k));}return 0;}poj 1023 the fun number system (经典进位制)题意:一种由2进制衍生出来的进制方法(我们暂且称为“类2进制”);标明'n'的位置上原2进制该位的权重要乘上-1,才是现在进制方法该位的权重;譬如说;pnp对于的能表示的数2来说就是 110;即1*2^2+(-1)*1*2^1+1*2^0=2;算法:这是数论中的进位制问题,我们可以仿照原来的求一个数二进制表示方法;但首先,我们应该考虑几个问题;①k位这种类2进制的表示范围;显然,当给出的'p','n'序列中,我们将所有p的位置都置为1其余位是0,此时最大;当我们将所有n的位置置为1,其余为0,此时最小;不过当我们求最大限max和最小限min时会有一个溢出问题;比如64位全是p的序列,那么max会溢出,值为-1;同理min在全是n 时也会溢出,为1;显然是max>=0,min<=1,溢出时产生异常,依次可以判断;②是否是最大限和最小限之间的数都能表示呢?都可以,而且能够表示的数是2^k个,这个原始2进制是一样的;因为每个位上要么是0,要么是1,而且每个位上的权重唯一的,不能通过其他位的01组合获得;最后,我们就可以仿照原始二进制来算在类2进制下的表示;不断求N的二进制最后一位和右移;如果取余是1,则该位上一定是1,如果该位对于字母为‘n’,则高位应该再加1;这里对2取余可能会出错,因为对于负数,补码的表示,最后一位一定是和原码一样的每次的右移后(有时需先加1)补码表示正好符合要求(可找实例验证);#include<iostream>using namespace std;__int64 N,M;char s[100],res[100]={'\0'};int main(){int T;scanf("%d",&T);int i,j;__int64 _max,_min;char ch;while(T--){scanf("%I64d",&N);scanf("%s",s);_max=0;_min=0;for(i=0;i<N;i++) //找出能表示的范围;{if(s[i]=='p') _max=2*_max+1,_min*=2;else _min=2*_min-1,_max*=2;}scanf("%I64d",&M);if((M<_min&&_min<=0)||(M>_max&&_max>=0)) puts("Impossible"); //注意防止64位数的溢出;else{memset(res,'\0',sizeof(res));for(i=N-1;i>=0;i--){int flag=0;if(M&1) //这里不能是平常的%2; {res[i]='1';if(s[i]=='n') flag=1;}else res[i]='0';M>>=1;if(flag) M++; //如果是n就需其高位加1;}printf("%s\n",res);}}system("pause");return 0;}POJ2506 Tiling 递推+高精给看似复杂的题找到了合适的规律就会变得简单。
ACM中数论
数论研究的重点是素数。
整除和因子:如果a= mb,其中a、b、m为整数,则当b≠0时,可以说b能整除a。
换句话说,a 除以b余数为0。
符号b|a常用作表示b能整除a。
当b|a时,b是a的一个因子。
素数:素数p是大于1且因子仅为± 1和±p的整数。
为简单起见,下面仅涉及非负整数。
互为素数:整数a和b互素,如果它们之间没有共同的素数因子(即它们只有一个公因子1)。
例如,8和15互素,因为1是8和15仅有的公因子(8的因子是1,2,4和8,而15的因子是1,3,5和15,可见8和15的公因子是1)。
模运算:给定任一正整数n 和任一整数a,如果用a除以n,得到的商q和余数r,则以下关系成立:a = qn + r0 ≤r < n; q = ⎣a/n⎦其中⎣x⎦表示小于或等于x的最大整数。
如果a是一个整数,而n是一个正整数,则定义a mod n为a除以n的余数。
a mod n也可记为“a (模n)”。
例如,30除以7的余数是2(30 = 4 ⨯ 7 + 2),可记为30 mod 7 = 2。
注意:如果a mod n = 0,则n是的a一个因子。
因为在模n运算下,余数一定在0到(n- 1)之间。
因此,模n运算将所有整数映射到整数集合{0, 1. …, (n– 1)}。
这个整数集合又称为模n的余数集合Z n。
因此余数集合Z n= {0, 1. …, (n–1)} (1) 如果(a mod n)=(b mod n),则称整数a和b模n同余,记为a≡b (mod n)。
但通常mod n不必用括号括起来,也就是说,可以记为a≡b mod n。
显然,a≡b mod n等价于b≡a mod n。
例如,73 ≡ 4 mod 23。
显然,这里mod 23一定不能省略不写。
模运算有一个性质很有用,即:如果n|(a–b)(即n能够整除(a–b)),则a≡b mod n。
反之,如果a≡b mod n,则n能够整除(a–b),即n|(a–b)。
ACM必做50题的解题-高精度
POJ 1001 Exponentiation高精度数的计算,以前在网上看到过一个计算大数阶乘比如10000000!的算法,总体思想就是将结果用数组保存起来,然后将结果的每一位与乘数相乘,当然还有进位...有了这个算法的思想,这个题思路就可以是:先将输入的小数转换成一个整数,当然这个整数肯定能够用int类型的变量保存,比如1.2345, 通过函数 removeDot()将它转化成12345,然后利用大数阶乘的思想计算12345*12345.....*12345, 最后的就是输出了,这个要考虑的情况比较多,因为这个也WA了5次才AC(笨的要死), 情况虽多,但不难.这道题是高精度计算的,不算很难,但是很繁琐,尤其是对输入输出的要求。
被这道题搞了好久,耐心来,一点一点调试,总会成功的。
#include<iostream>#include<string>#include<math.h>using namespace std;char ans[10];char res[2][205];__int64 ps;//有几位小数点int len;//长度,R的有效长度//计算c = b * avoid Multiply(char * b,int bt,char * a,int at,char * c){int i,j;int up=0;for(i=0;i<at;++i){up=0;for(j=0;j<bt;j++){int t;if(c[i+j]==0)c[i+j]='0';t=(a[i]-48)*(b[j]-48)+c[i+j]-48+up;if(t>=10){up=t/10;t=t%10;c[i+j]=t+48;if(j==(bt-1) )c[i+j+1]=(up+48);}else{c[i+j]=t+48;up=0;}}}}int main(){string str;int n;int i,j;int s,t;int pos;while(cin>>str>>n){i=5;pos=str.find('.',0);if(pos<0)//没有小数点{ps=0;//zs=zs*n;//后面为0的总数}else//有小数点{ps=(5-pos);ps=ps*n;//小数位总数}memset(ans,0,sizeof(ans));memset(res[0],0,sizeof(res[0])); memset(res[1],0,sizeof(res[1])); t=5;s=0;while(str[s]=='0' || str[s]=='.') s++;j=0;for(i=t;i>=s;--i){if(str[i]=='.')continue;ans[j]=str[i];j++;}len=j;strcpy(res[0],ans);strcpy(res[1],ans);for(i=2;i<=n;++i){memset(res[(i+1)%2],0,sizeof(res[0]));Multiply(res[i%2],strlen(res[i%2]),ans,len,res[(i+1)%2]); }int L=strlen(res[(n+1)%2]);int d=(n+1)%2;if(ps>0){j=0;while(res[d][j]=='0')j++;if(ps>=L){printf(".");for(i=ps-1;i>=j ;--i){if(i>=L)printf("0");elseprintf("%c",res[(n+1)%2][i]);}}else{if(j>=ps){for(i=L-1;i>=ps;--i)printf("%c",res[(n+1)%2][i]);}else{for(i=L-1;i>=j ;--i){if(i==ps){printf("%c.",res[(n+1)%2][i]);}elseprintf("%c",res[(n+1)%2][i]);}}}}else{for(i=L-1;i>=0;--i)printf("%c",res[(n+1)%2][i]);}printf("\n");}return 0;}POJ 1047 Round and Round We Go题意:输入一个数,要求判该数是否为循环数.依次将该数分别于2到len(输入的数的位数)相乘,在乘的过程中,判断数发生了变化没有,如果发生了变化,则直接输出该数不是循环数,没有必要再继续乘下去,而如果是循环数,则一直需要乘下去.#include<iostream>#include<string>#include<cstdlib>#include<algorithm>using namespace std;int num[70];int ans[70];char ss[70];bool match[70];int main(){int i,j,k,len;bool flag;while(scanf("%s",ss)!=EOF){len=strlen(ss);for(i=len-1,j=0;i>=0;i--,j++)num[j]=ss[i]-'0';for(i=2;i<=len;i++){memset(ans,0,sizeof(ans));for(j=0;j<len;j++) //依次将该数与2到len之间的数相乘ans[j]=num[j]*i;for(j=0;j<len;j++) //循环处理进位if(ans[j]>=10){ans[j+1]+=ans[j]/10;ans[j]%=10;}memset(match,0,sizeof(match)); //match数组用来标记数的匹配情况flag=true;for(j=0;j<len;j++){k=0;while(k<len){if(ans[k]==num[j]&&!match[k]) //两数字相等且没有进行标记{match[k]=true;break;}k++;}if(k==len) //此时说明相乘后的结果发生了改变{flag=false;break;}}if(!flag){printf("%s is not cyclic\n",ss);break;}}if(flag)printf("%s is cyclic\n",ss);}system("pause");return 0;}POJ 1131 Octal Fractions给定一个八进制的小数题目要求你把它转换为十进制小数,转换后小数的位数是转换前八进制小数位数的3倍且不输出末尾无意义的零(即后置零). 我采用的方法是乘10然后对8取整(现在假设将p进制的小数转换为n进制,同样采用乘n取整:),每转换一位,都必须从最低位s[len-1]开始至小数的最高位(即小数点后的一位),每次计算积 g=a[j]*n+k(其中k为下一位积的进位),本位进位数 k=g/p,积在本位存入 s[j]=g%p;最后的整数k作为转换的一位存放于转换结果字符串中。
【高中数学竞赛专题大全】 竞赛专题15 初等数论(50题竞赛真题强化训练)解析版+原卷版
【高中数学竞赛专题大全】 竞赛专题15 初等数论 (50题竞赛真题强化训练)一、填空题1.(2020·浙江·高三竞赛)将1~2020的数字按顺时针方向围成一个圆圈,然后从1开始,按顺时针依次隔一个数拿走,即拿走1,3,5,…,这个过程一直进行下去,直到剩下最后一个数字,则最后剩下的数字是___________. 【答案】1992. 【解析】 【详解】在第一轮中,从1开始到拿走1991,共取走996个数,此时余下1024个数, 1991后一项偶数为1992,此后共取10次,余下的数为1992, 故答案为:1992.2.(2021·全国·高三竞赛)关于x 、y 的方程11112007x y xy ++=的正整数解(,)x y 的个数为________. 【答案】48 【解析】 【详解】解析:由11112007x y xy ++=得2007200720070xy x y ---=,整理得 32(2007)(2007)2007200823223251x y --=⨯=⨯⨯⨯,从而,原方程的正整数解有(31)(21)(11)(11)48++++=(个). 故答案为:48.3.(2021·全国·高三竞赛){}n a 为正整数列,满足112,n a a +=为213133n n a a -+的最小素因子,12,,,,n a a a ,构成集合A ,P 为所有质数构成的集合,则集合P A 的最小元素为___________. 【答案】5 【解析】由于122,3a a ==,故2,3A ∈,所以集合P A -的最小元素5≥.假设存在正整数n ,使得5(3)n a n =≥,则211513133n n a a ---+,故()21512n a -++,这不可能,因为()212n a ++除以5的余数为1,3, 所以5P A ∈-.集合P A -的最小元素为5. 故答案为:5.4.(2021·全国·高三竞赛)质数p 和正整数m 满足32(2)1p m p m p ++=++,则p m +=___________.【答案】7 【解析】 【详解】由()221(1)p p m m +-=-,易见1m ,所以1p m -.设()1m kp k N +-=∈,则()2222,,(1)p p kp k p p k k p k k +=+==-.所以2k =,2,5p m ==,7p m +=.5.(2021·浙江·高三竞赛)已知集合{}12,,,n A a a a =⋅⋅⋅,n 为正整数.若对任意的1i j n ≤≠≤,i j a a -被4整除,但不被16整除,则n 的最大值为______.【答案】4 【解析】 【分析】 【详解】 考虑同余:对任意的1,i j i j n a a ≤≠≤-被4整除,则有(mod 4)i j a a k ≡≡,其中{0,1,2,3}k ∈, 而这类型的数模16的余数至多只有4种,所以n 最大值为4. 故答案为:4.6.(2021·浙江·高二竞赛)设数列123n n n a a a +⎡⎤⎡⎤=+⎢⎥⎢⎥⎣⎦⎣⎦,1n =,2,…,7这里[]x 表示不超过x的最大整数.若88a =,则正整数1a 有______种可能的取值情况.【解析】 【分析】根据高斯函数的性质,由88a =逐次往前求, 注意先定范围再验证,即可得到答案. 【详解】由88a =,可得710a =或11, 可得612a =或13或14; 可得515a =或16或17; 可得418a =或19或20或21; 可得322a =或23或24或25或26; 可得227a =或28或29或30或31或32;可得133a =或34或35或36或37或38或39,共7种.7.(2021·全国·高三竞赛)所有能使25n ⎡⎤⎢⎥⎣⎦为质数的正整数n 的倒数和为_________.【答案】3760【解析】 【分析】 【详解】1,2,3n =时,25n ⎡⎤⎢⎥⎣⎦都不是质数;4n =时,235n ⎡⎤=⎢⎥⎣⎦是质数;5n =时,255n ⎡⎤=⎢⎥⎣⎦是质数;6n =时,275n ⎡⎤=⎢⎥⎣⎦是质数.当8n ≥时,可设5n k r =±(其中k 为不小于2的正整数,0,1r =或2),则()22222111(5)2510(52)5555n k r k kr r k k r r =±=±+=±+, 所以2(52)5n k k r ⎡⎤=±⎢⎥⎣⎦.因为2k ≥,所以522k r ±>,所以2(52)5n k k r ⎡⎤=±⎢⎥⎣⎦不是质数.因此,能使25n ⎡⎤⎢⎥⎣⎦为质数的正整数n 只有4、5、6,它们的倒数和为1113745660++=.故答案为:3760. 8.(2021·全国·高三竞赛)若2020在p 进制下的各位数字之和为5p +,则质数p 的所有可能值为___________. 【答案】2,107 【解析】 【分析】 【详解】类似于在十进制下,我们有()()120|205p p --+⎡⎤⎣⎦, 于是()12014195|23p -=⨯⨯, 再注意p 为质数,就有2,3,107p =, 逐一验证得2p =或107p =. 故答案为:2,107.9.(2021·全国·高三竞赛)在1,2,3,4,…,1000中,能写成()221a b a N -+∈的形式,且不能被3整除的数有________个. 【答案】501. 【解析】 【详解】 设{}1,2,3,4,,1000S =,若221n a b =-+,则()3mod4n ≠.又()()2242211k k k =--+,()()2241111k k k +=+--+,()()22422121k k k +=+-+,因此,221n a b =-+当且仅当()3mod44n ≠.令(){|3mod44}A a S a =∈≡,(){|0mod3}B b S b =∈≡,则(){|3mod12}A B c S c ⋂=∈≡,因为250A =,333B =,84A B ⋂=,从而符合条件的数的个数为100025033384501--+=. 故答案为50110.(2020·浙江·高三竞赛)设a ,b ,c 为正整数,且2225548450a b c ab ac bc ++-+-=,则所有的解中a b c ++的最大值为___________. 【答案】30. 【解析】 【详解】配方得:222(22)50a c b a c ++--=(a ,c 等价). 注意到:22250017=++,22250055=++,22250345=++. 不妨设a c ≤且22b a c ≥+,(1)当22017b a c a c --=⎧⎪=⎨⎪=⎩,即1167a b c =⎧⎪=⎨⎪=⎩,此时116724a b c ++=++=.(2)当22055b ac a c --=⎧⎪=⎨⎪=⎩,即5205a b c =⎧⎪=⎨⎪=⎩,此时520530a b c ++=++=.(3)当22534b a c a c --=⎧⎪=⎨⎪=⎩,即3194a b c =⎧⎪=⎨⎪=⎩,此时319426a b c ++=++=.(4)当22435b ac a c --=⎧⎪=⎨⎪=⎩,即3205a b c =⎧⎪=⎨⎪=⎩,此时320528a b c ++=++=.(5)当22345b a c a c --=⎧⎪=⎨⎪=⎩,即4215a b c =⎧⎪=⎨⎪=⎩,此时421530a b c ++=++=.综上所述,所有的解中a b c ++的最大值为30. 故答案为:30.11.(2020·江苏·高三竞赛)设正整数a ,b ,c ,d 满足23a b =,45c d =,且303b d -=,则a c -的值为___________. 【答案】123801 【解析】 【详解】解析:由题意可得a =c =b 必为完全平方数,d 一定能开4次方.设2b n =,4d m =,则()()223101b d n m n m -=+-=⨯,且注意到3,101都是质数,则223031n m n m ⎧+=⎨-=⎩或者221013n m n m ⎧+=⎨-=⎩,解得52n =,7m =,则35123801a c n m -=-=. 故答案为:123801.12.(2020·江苏·高三竞赛)设,m n N ∈,,2m n ≥,若33333333213111213112n m n m ----⋅=++++,则m n +的值为___________. 【答案】6 【解析】 【详解】解析:因为3311(1)111(1)1n n n n n n n n --++=⋅++-+, 累乘可得原式22(1)1222(1)33(1)n n n n n n n n ++++=⋅=++,则232333323122211n n m n n m m ++==+++--, 故223232221n n n n m +-=++-, 从而可得()2326131816162(1)(2)(1)(2)n n m n n n n n n ++⎛⎫-==+=+ ⎪+--+-+⎝⎭, 则()()1218n n -+,且,2m n ≥,在()()12n n -+的值为6,9,18, 故4n =,2m =.故6m n +=. 故答案为:6.13.(2021·浙江·高三竞赛)将顺序为1,2,…,2020的2020张卡片变成1011,1,1012,2,…,2020,1010的顺序,即原先的前1010张卡片移至第2,4,…,2020张,这称为一次操作.若从顺序1,2…,2020开始操作,则至少经过______次操作可以恢复到初始顺序. 【答案】1932 【解析】 【分析】 【详解】记第1i 次调整前的位置为i a ,调整后的位置记为1i a +,初始位置记为0a ,则112,101022021,1010i i i i a a a a a +≤⎧=⎨->⎩,所以102(mod 2021)2(mod 2021)n i i n a a a a +≡⇒≡, 因20214347=⨯,所以(2021)(43)(47)1932ϕϕϕ==, 所以193221(mod 2021)≡,要恢复原样,则0n a a =, 所以1932n =. 故答案为:1932.14.(2019·广西·高三竞赛)满足y =(x ,y )有____________ 对. 【答案】6 【解析】 【详解】设2251,2019,,n x m x n N m N =+=+∈∈. 224()()19682341m n m n m n -=+-==⨯⨯,由(m +n )与(m -n )奇偶性相同,可知它们同为偶数,且(m +n )>(m -n ) 实数对(m +n ,m -n )所有可能的取值共有6对:()32341,2⨯⨯,()322341,2⨯⨯,()32341,2⨯⨯, ()3241,23⨯⨯,()22241,23⨯⨯,()3241,23⨯⨯.由有序数对(x ,y )与(m +n ,m -n )一一对应,可知所求正整数对为6对. 故答案为:6.15.(2019·四川·高三竞赛)若正整数n 使得方程33n x y z +=有正整数解(x ,y ,z ),称n 为“好数”.则不超过2019的“好数”个数是_____ . 【答案】1346 【解析】 【详解】首先易知若n 为“好数”,则n +3也是“好数”又显然1、2是“好数”,从而当1,2(mod3)n ≡时,n 均为“好数”. 由费马(Fermat )大定理知:333x y z +=无正整数解,即3不是“好数”.于是n =3k (k ∈N *)都不是“好数”.否则,存在k ∈N *,使得3k 是“好数”,即方程333k x y z +=有正整数解(x ,y ,z 0),从而333x y z +=有正整数解()000,,kx y z ,矛盾!故当且仅当n 满足1,2(mod3)n ≡时,n 为“好数”. 所以,不超过2019的“好数”个数是2201913463⨯=. 故答案为:1346. 二、解答题16.(2021·全国·高三竞赛)求证:对于正整数n ,令22n a ⎡⎡=+⎣⎣,数列{}n a 中有无穷多个奇数和无穷多个偶数([]x 表示不超过实数x 的最大整数). 【答案】证明见解析 【解析】 【详解】1212101100.101100bb c c =⋅⋅⋅=⋅⋅⋅⋅, 其中{}{}0,1,0,1i i b c ∈∈.用反证法,先证明数列中有无穷多个偶数.假设,数列中只有有限个偶数,那么存在整数N ,n N ∀>,n a 是奇数, 则存在正整数M ,使得1212101100101100M n M a bb b c c c =+,且当n M >时,{},{0,1}n n b c =,12(2)110110011N d d d ⋅∈Q ,矛盾!同理可证明数列中有无穷多个偶数.所以数列{}n a 中有无穷多个奇数和无穷多个偶数.17.(2021·全国·高三竞赛)使得A =n 为_________. 【答案】1或11##11或1 【解析】 【详解】,,,(,)1aa b a b b+=∈=N ,则222222222917647799n a a b b n n b b a b a -+=⇒==-++--. 又(,)1a b =,所以()()22222,9,1b b a b a -==,故22964b a -,所以229(3)(3){1,2,4,8,16,32,64}b a b a b a -=+-∈,229b a -模3余2,故2298b a -=或32,故3831b a b a +=⎧⎨-=⎩或3432b a b a +=⎧⎨-=⎩或33231b a b a +=⎧⎨-=⎩或31632b a b a +=⎧⎨-=⎩或3834b a b a +=⎧⎨-=⎩,所以(,)(1,1)=a b 或(7,3),因此n 为1或11. 故答案为:1或11.18.(2021·全国·高三竞赛)设n 是正整数,12,,,k d d d 是n 的全部正因数.定义1212()(1)(1)(1)k d d d k f n d d d =-+-++-,已知()f n 是2的幂次,求证:n 没有1之外的平方因数.【答案】证明见解析 【解析】 【分析】设2(1)rn s r =≥,其中1i tai i s p ==∏,利用因数和函数可得()f n 与各质因数的关系,再根据()f n 是2的幂次结合反证法可得1i a =,从而可n 没有1之外的平方因数. 【详解】用()n σ表示n 的正因数之和.如果n 是奇数,则()()0f n n σ=-<,舍去. 当n 是偶数时,设2(1)r n s r =≥,其中1i tai i s p ==∏(i p 为n 的奇质因数,i a +∈N ,3i p ≥).所以()()()111()2221()23i ta rr r i i f n s p σσ-+==+++-=-∏.其中()21i i a a i i i i p p p p σ=++++,因为()f n 是2的幂次,所以1231,1r r +-==,每个()i ai p σ是2的幂次,且i a 是奇数,又()()()12246111i i i a a a i i i i i i i i i p p p p p p p p p σ-=++++=++++++,故1246,11i a i i i i i p p p p p -++++++均为4的倍数,因为23,1(mod 4)i i p p ≥≡,所以如果1i α>,则1241,,,,i a i i i p p p -这些数的总个数是4的倍数,所以12211i a i i i p p p -++++.因为212(mod 4)i p +≡,所以121i a i i p p -+++不是2的幂次,于是1i a >不成立.所以1i a =,所以1ti i s p ==∏(i p 为互异的奇质因数),12ti i n p ==∏,可见n 没有非平凡的平方因数. 【点睛】思路点睛:竞赛中与正因数和有关的问题,多用因数和函数来分析处理,令注意利用因数分解定理把因数问题转化为即质因数的问题来处理.19.(2021·全国·高三竞赛)用()P n 表示正整数n 的各位数字之和,求所有这样的三位数n ,使得满足:1(3)()3P n P n +=.【答案】117、207、108. 【解析】 【分析】 【详解】由于(),(3)P n P n +都是正整数,则据条件,()P n 是3的倍数,因此n 与3n +都是3的倍数. 设n abc =,且数n 加3后必须产生进位,则7c ≥.(因为,如果6c ≤,则数n 加3后不会产生进位,于是(3)()3()P n P n P n +=+>,矛盾)并且b 不能是9,这是因为,若9b =,则当9a =时,99n c =,数n 加3后成为1100c ,1{0,1,2}c ∈,这时1(3)()3P n P n +<.当9a <时,9n a c =,若1113n a b c +=,则1111,0,310a a b c c =+==+-. 由3(3)()P n P n +=,得3[(1)0(310)]9a c a c ++++-=++, 即2()27a c +=,矛盾!所以9b <.今由3[(1)(310)]a b c a b c ++++-=++得9a b c ++=,其中1,7,8a c b ≥≥≤, 依次考虑c 、a 、b 的取值,得到三个数:117、207、108,验证知,它们皆合题意. 20.(2021·全国·高三竞赛)已知a 、b 、c 、d 是不同的正整数,且满足a b c da b b c c d d a+++++++是整数,求证:+++a b c d 不是质数. 【答案】证明见解析. 【解析】 【分析】 【详解】 由1a b c d a b c da b b c c d d a a b c d a b c d a b c d a b c d +++>+++=++++++++++++++++, 且a b c da b b c c d d a+++++++ 1111b c d aa b b c c d d a=-+-+-+-++++ 43b c d a a b b c c d d a ⎛⎫=-+++< ⎪++++⎝⎭,所以2a b c d a b b c c d d a+++=++++, 故2a c b d c aa b c d b c d a b c d a+=--=+++++++, 因此1111a c a b d a b c c d ⎛⎫⎛⎫-=- ⎪ ⎪++++⎝⎭⎝⎭, 所以()()()()d b d b a c a b d a b c c d --⋅=⋅++++且d b ≠, 所以()()()()a b c c d c a b d a ⋅++=⋅++,即22ac abd a c bcd +=+. 整理得()()0ac c a bd a c -+-=且a c ≠,所以ac bd =. 假设p a b c d =+++是质数,则 2()a a b c d a ab ac ad +++=+++ 2a ab bd ad =+++ ()()a b a d ap =++=,所以()p a b +或()p a d +,而,p a b p a d >+>+,矛盾. 综上+++a b c d 不是质数.21.(2021·全国·高三竞赛)解关于实数x 的方程:{}202020201arctank x x k==∑(这里{}[][],x x x x =-为不超过实数x 的最大整数) 【答案】{}0 【解析】 【分析】【详解】(1)当0x <时,{}202020201arctan 0(1,2,,2020),arctan 0k x x k x k k =<=<≤⋅⋅⋅∑,此时原方程无解.(2)当0x =时,有{}202020001arctan0k x x k===∑. (3)当01x <<时,令arct ()1)2an (0x xf x x =-<<,则211()0(01)12f x x x '=-><<+, 故()f x 在()0,1上递增.有()()00f x f >=,即arctan 2x x > 于是,此时{}202020204202020201111125arctan 2224k k k x x x xx x x k k k =====>>=>∑∑∑,即1x >,矛盾.故无解.(4)当1≥x 时,注意到111123tan(arctan arctan )112316++==-, 且由110arctan arctan arctan1arctan1232π<+<+=,知11arctan arctan 234+=π.则{}20202020202011111arctan arctan arctan1arctan arctan 1232k k x x k k π===≥>++=>∑∑,与{}202001x <<,矛盾.故此时无解.由(1)(2)(3)(4),知原方程的解集为{}0.22.(2021·全国·高三竞赛)两两不等的实数x 、y 、z 满足222(2)(2)(2)y x z y x z ⎧=-⎪=-⎨⎪=-⎩,求x y z ++.【答案】5或6. 【解析】 【分析】 【详解】由原方程变形可得到1(1)(3)1(1)(3)1(1)(3)y x x z y y x z z -=--⎧⎪-=--⎨⎪-=--⎩和4(4)4(4)4(4)y x x z y y x z z -=-⎧⎪-=-⎨⎪-=-⎩,又由x 、y 、z 两两不等知,,1,4x y z ≠, 于是()()()3331x y x xyz ---==.令,p x y z q xy yz zx =++=++,化简得39p q =+. 另一方面,原方程三式相加得2(2)412p p q p =--+, 化简得25122p p q -+=,联立就有26530p p p =-+,即5p =或6. 最后,当22224cos 744cos 784cos 7x y z ππ⎧=⎪⎪⎪=⎨⎪⎪=⎪⎩时可以取到5,当2224cos 924cos 944cos 9x y z πππ⎧=⎪⎪⎪=⎨⎪⎪=⎪⎩时可以取到6.23.(2021·全国·高三竞赛)若关于z 的整系数方程320z pz qz r +++=的三个复数根在复平面内恰好成为一个等腰直角三角形的三个顶点,求这个等腰直角三角形的面积的最小值. 【答案】1 【解析】 【分析】 【详解】设该等腰直角三角形斜边中点对应的复数为1z ,直角顶点对应的复数为()1220z z z +≠, 则另外两个顶点对应的复数分别为12z z i +和12z z i -,依题意有: 32121212()()()z pz qz r z z z z z z i z z z i +++=-----+,化简得223223111221112223,32,z x z p z z z z q z z z z z z r +=-++=+++=-,所以3222221223,489z z q p Z z z pq r Z =-+=-∈∈.进而122z z Q +∈,与123z z p Z +=-∈联立就有2z Q ∈.再由22223x q p Z =-∈知2z Z ∈,于是21z ≥,所以等腰直角三角形的面积最小为1.另一方面,3210z x z +++=的三个复数根恰是面积为1的等腰直角三角形的顶点. 24.(2021·全国·高三竞赛)证明:存在无穷多个奇数n ,使得!1n +是合数. 【答案】证明见解析 【解析】 【分析】 【详解】证明当奇数(3)n n ≥时,!1n +与(!)!1n n -+不均为质数即可: 用反证法,若!1n +为质数,设!1n p +=,则结合威尔逊定理可得: 111(!)!(1)!(1)!(1)(2)()(mod )n n p n p n p ----=--≡----1(1)!(1)1(mod )n n n p +≡--⋅≡--≡-,此时有(!)!1n n -+为合数,而n 奇数得!n n -也是奇数, 从而存在无穷多个奇数n ,使得!1n +是合数.25.(2019·山东·高三竞赛)已知4239n n -+是素数,求正整数n 的所有可能值 【答案】n =1,n =2 【解析】 【详解】因为()()4222393333n n n n n n -+=++-+,所以或n 2-3n +3=1,解得n =1,2.将n =1,n =2代入检验均满足题意,所以n =1,n =2为所求.26.(2021·全国·高三竞赛)求方程(31)(31)(31)34x y z xyz +++=的所有正整数解(,,)x y z . 【答案】(,,)(28,5,2),(11,7,2)x y z =或其排序,共12组解. 【解析】 【详解】 不妨设x y z ≥≥.若z >31z +<.同理,31,31x y +<+<. 三式相乘得(31)(31)(31)34x y z xyz +++<,与原方程矛盾. 于是,5z ≤<. (1)若1z =,则4(31)(31)346()20x y xy xy x y ++=⇒+++=.显然,无正整数解.(2)若2z =,则7(31)(31)68521()70(521)(521)x y xy xy x y x y ++=⇒-+-=⇒--=24762717=⨯⨯.只有47611941434=⨯=⨯,才有对应的正整数,x y ,此时(,)(28,5)x y =或(11,7). (3)若3z =,则10(31)(31)102615()50x y xy xy x y ++=⇒-+-=.两边取模3即知矛盾,故无解. (4)若4z =,则13(31)(31)1361939()130x y xy xy x y ++=⇒-+-=3(1939)(1939)176821317x y ⇒--==⨯⨯.故此时(1939)42y -≤,故39y ≤≤,逐一检验后无解. 综上,(,,)(28,5,2),(11,7,2)x y z =或其排序,共12组解.27.(2021·全国·高三竞赛)求方程||1r s p q -=的整数解,其中p 、q 是质数,r 、s 是大于1的正整数,并证明所得到的解是全部解. 【答案】证明见解析 【解析】 【详解】容易看到两个质数中肯定有一个为2,不妨假设2,21r sp q =-=,即21r s q -=±.若21r s q =+,从余数去讨论,3(mod4)q ≡,s 为奇数.()1221(1)1rss s q q qq--=+=+-++,所以121212,12,r r s s q q q --⎧+=⎨-++=⎩()1111111(1)(1)(2)2211222222sr sr s r r r s r s r r s s s s ---⎡⎤=-+=-++=-++⎣⎦,从奇偶性可以看出这种情形方程无解.若21r s q =-为偶数,注意到()1221(1)1r s s q q q q --=-=-+++,所以121212,12,r r s s q q q --⎧-=⎨+++=⎩()11111(1)21221122(1)22sr sr s r r r r s s s s --=+-=+++-+.令2u s v =,其中v 为奇数,则 ()11111(1)21221122(1)22sr sr s r r u r u r s v s v --++=+-=+++-+,观察最后一项,则v 为1,故2u s =,所以221ur q =-,故()()1122211u u r q q --=-+,故1112221212u u r r q q --⎧-=⎪⎨+=⎪⎩,所以12222r r +=,所以121,2r r ==,1u =, 所以3q =,3r =,2s =,综上,考察到对称性,原方程恰有两组解:3,2,2,3.p q r s =⎧⎪=⎪⎨=⎪⎪=⎩或2,3,3,2.p q r s =⎧⎪=⎪⎨=⎪⎪=⎩ 28.(2021·全国·高三竞赛)证明:对任意正整数N ,都存在正整数n N >和n 个互不相同的正整数12,,,n x x x ,使()222222121220202020n n x x x x x x -++++是完全平方数.【答案】证明见解析 【解析】 【详解】对于3m ≥,必存在不同的正整数12,,,m x x x 满足2221212m m x x x x x x S =++++,令{}112121max ,,,m m m x x x x x x x +=->,则有()21211212m m m m x x x x x x x x x x +=-()2121211m m x x x x x x =-+-()()2222121211m m x x x x x x S =-++++-22221211m m x x x x S +=++++-.以此类推,当504S >时,存在不同的正整数11504,,,,,m m m S x x x x ++-满足2221250412504504m S m S x x x x x x +-+-=++++.存在6N ≥,定义(1)k x k k N =≤≤,则()2221212504N N x x x x x x -+++>.由前述结论可得存在n N >使得()2221212504n n x x x x x x -+++=,此时()2222222222121212122020202020201010n n n n x x x x x x x x x x x x -++++=-+()2121010n x x x =-为完全平方数.29.(2021·浙江·高三竞赛)已知素数p ,q 满足21p q =+.证明:存在正整数m 使得mp 的十进制表示的各位数字之和是2或3. 【答案】证明见解析 【解析】 【分析】 【详解】2p =,3不合题意,若5p =则取110mp =即可.下面假设7p ≥.由费马小定理()()12101101101101p q q q p --=-=+-可知101q p +或101q p -.前者意味着取101q mp =+满足条件.若是101qp -,我们断言{}012110,10,10,,10q A -=⋅⋅⋅中的数模p 两两不同余,即有q 个不同的余数.这是因为若有()1010mod a b p ≡,(01a b q ≤<≤-)则()101mod b a p -≡,由b a -与q 互素以及裴蜀定理知存在正整数u ,v 使得()1u b a vq --=,这样 ()()()1110101010mod uvb a vq q p -+≡==⨯.这意味着1019p -=即3p =,不合题意因此{}012110,10,10,,10q A -=⋅⋅⋅中的数模p 两两不同余.设它们的余数是{}{}12,,,1,2,,1q B r r r p =⋅⋅⋅⊆⋅⋅⋅-. 我们考虑下面的52p -个余数对,它们覆盖了除了0,1,12p -,2p -,1p -之外的所有余数:()2,3p -,()3,4p -,…,31,22p p -+⎛⎫⎪⎝⎭ 若某个对子的两个余数都在B 中出现,不妨设10a k ≡,101b p k ≡--,则10101a b mp =++是p 的倍数,满足题意.若每个对子中的余数都在B 至多出现一个的话,由于12p B -=,所以0,1,12p -,2p -,1p -在B 中出现至少两个,已知1B ∈,0B ∉,其余三个余数12p -,2p -,1p -至少有一个在B 中出现. 若12p B -∈,即有某个1102a p -≡,则2101a mp =⨯+满足题意.若2p B -∈,即有某个102a p ≡-,则102a mp =+满足题意. 若1p B -∈,有某个101a p ≡-,则101a mp =+满足题意. 综上所述,存在p 的倍数的十进制数字和是2或3.30.(2021·全国·高三竞赛)设m 是一个给定的正整数,d 是它的一个正因子.已知{}0i i a ∞=和{}0i i b ∞=是两个由正整数构成的等差数列,满足:存在正整数i 、j 、k 、l ,使得()(),1,,ijkla b a b m ==.证明:存在正整数t 、s 使得(),t s a b d =.【答案】证明见解析 【解析】 【分析】 【详解】注意到m 可逐次除以它们若干素因子得到d ,这样只需证对m 的任意素因子p ,存在正整数α、β,使得(),ma b pαβ=. 由于(),k t a b m =,故k a p 、l b p 必有一项不能被m 整除.不妨设k ab不能被m 整除. 设等差数列{}i a 、{}j b 的公差分别为u 、v ,则0i a a iu =+,0j b b jv =+. 下面分两种情况:(1)若p v .令,k a k l p αβ==+.这时k l a vb b pβ=+. 注意到k m ma b p pβ、,又p v 且k a m p ,所以m b β.这说明m p 是a α、b β的公因子,且m 不是它们的公因子.设q 是a α、b β的一个不同于p 的公因子,则q a α、q b β、a qpα. 故,a q a b v p ααβ⎛⎫- ⎪⎝⎭,即(),k t q a b m =.又p q ,故mq p .故(),m a b p αβ=.(2)若p v .先证p u . (*)事实上,假设p u ,由(),k l a b m =知00,k l p a ku a p b lu b -=-=.因此,i j p a p b ,这与(),1ija b =矛盾!故(*)得证.取正整数s ,使得l s b p能被mp 整除,但不能被m 整除. 令,l sb k l p αβ=+=.这时,l kl s b a a u b b p αβ=+=. 注意到k m a p 、l m b p、lsb m p p ,所以m p 是a α与b β的公因子.又lsb m p ,且p u ,所以m a α,从而m 不是a α、b β的公因子.设质数q 是a α,b β不同于p 的公因子,则q b β,l k sbq a u a p α⎛⎫-= ⎪⎝⎭. 即(),k l q a b m =. 又q p ≠,所以mqp.这说明(),m a b p αβ=.由(1),(2)知结论成立.31.(2021·全国·高三竞赛)设多项式02()()(2)==+≥∑dii i P x a x a d 的系数为正整数.定义数列{}n b :()101,(1)n n b a b P b n +==≥.证明:对于任意的整数2n ≥,均存在质数p ,使得n p b ,且()121,1n p bb b -=.【答案】证明见解析 【解析】 【分析】 【详解】假设存在整数2n ≥,使得n b 的任意一个质因子均为某个(11)i b i n ≤≤-的因子(对于n b 的不同的质因子,i 的取值可以不同).令p 为n b 的一个质因子,且rn b p l =,其中,,(,)1r l p l +∈=N . 则110012()()(mod )dr i r n n i i b P b a p l a a b p ++===+≡=∑假设()1mod ,r n i i b b p i +++≡∈N 成立,则()()()111mod r n i n i i i b P b P b b p +++++=≡=.所以由数学归纳法知对任意的正整数i ,均有()1mod r n i i b b p ++≡.进而有()12mod r n n kn b b b p +≡≡≡,所以1r kn n p b b +-.定义()p V m 表示正整数m 的标准分解中所含的p 的幂次数, 由()p n V b r =,得()p kn V b r =.令i p b 对某个(11)i i n ≤≤-成立,同上可证()()()23p i p i p i V b V b V b ===.于是()()()p n p in p i V b V b V b r ===.从而,若p 为n b 的一个质因子,则它在n b 的中的次数等于在某个(11)i b i n ≤≤-中的次数. 所以121n n b bb b -,进而121n n b b b b -≤.由()211n n n b P b b --=>,得21kn n k n b b b --<,所以111211n i n n i nn i i b bb ---==<<∏∏,矛盾,故原命题成立.32.(2021·全国·高三竞赛)一个大于1的整数m ,如果对所有的正整数n ,都存在正整数x 、y 、z ,使得222n mx y z =--,则称m 为上数,否则称为下数.试问:是否存在无数多的上数?是否存在无数多的下数?【答案】存在无数多个上数也存在无数多个下数. 【解析】 【分析】 【详解】存在无数多个上数也存在无数多个下数.首先,存在无数多个下数.考查93m k =+,其中k 为正整数.考查不定方程2226(93)k x y z =+--,若存在解x 、y 、z 则220(mod 3)y z ≡+, 故有()0mod3y z ≡≡,所以2222(93)36(mod 9)k x y z x +--≡≡,即2(mod3)x ≡,矛盾.故无解. 即所有的93k +为下数.其次,我们证明存在无数多个上数,我们考查21c +,其中222c a b =+(a 、b 、c 为勾股数).(1)注意到22222(1)(1)21c x c x x x +---=-,可知所有的奇数1n >,均存在解. 又22211c a b =+--,可知所有奇数均存在解.(2)对于n 为偶数的情形,考查222222(1)(1)(2)4454(2)9c x cx x c x c c x c +---+-=-+-=---. 令c 为奇数,故有24(2)9x c ---可以为所有模4余2的数. (3)而对于4|n ,可以转为考查2224222n x y z m ⎛⎫⎛⎫⎛⎫=-- ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭的问题,不断转化.终会归为(1)或是(2)其中的一类.而存在无数多个勾股数a 、b 、c (a 、b 、c 互质),即存在无数多个满足题意的21c +. 即有无数多个上数.33.(2021·全国·高三竞赛)如果正整数n 满足存在正整数a 、b 、c 使得()()()()()(),,,,,,n b c a bc c a b ca a b c ab =⋅+⋅+⋅,则称n 为好数.求证:存在连续2020个正整数这2020个正整数都是好数.注:对于正整数x ,y ,(),x y 表示x ,y 的最大公因数. 【答案】证明见解析 【解析】 【分析】 【详解】取121111121,(2),1,(2)(2,3,,2020)i i i l i i l x y x x x y y x x i -===+=-⋅⋅⋅=+=∏.对2,3,,2020i =,由()()1,1,21i i i i x x x x +=++=,知,2i i x x +均与121,,,i y y y -互质,故i y 与121,,,i y y y -均互质.则122020,,,y y y 两两互质.对1,2,3,,2020i =,考查i y 的一个倍数,设为()22i i i n my mx x ==+.注意到取2,,i i i a mx b mx c x ===,则有()()()()()(),,,,,,n b c a bc c a b ca a b c ab =⋅+⋅+⋅. 故n 为好数.则由n 的任意性,知i y 的一切倍数均为好数. 注意到122020,,,y y y 两两互质,那么由中国剩余定理知关于x 的同余方程组()()mod 1,2,,2020i x i y i ≡-=有正整数解0x .这意味着对1,2,3,,2020i =,有0x i +是i y 的倍数,因此0x i +是好数. 取()01,2,,2020x i i +=即可满足题意.34.(2021·全国·高三竞赛)设函数:f N N ++→同时满足以下三个条件: (1)对任意x 、y N +∈,有()()()f xy f x f y =; (2)对任意x N +∈,有()()f f x x =; (3)()220()20f x x x ≠≤≤. 求()2f 的最小值. 【答案】1013. 【解析】 【分析】 【详解】在()()()f xy f x f y =中令1x y ==,得()11f =.①设质数p 满足()f p 不是质数,若()1f p =,则由(2)及①, 有()()()11p f f p f ===,矛盾.故()f p 为合数,设()f p xy =(x ﹐y 均为大于1的正整数), 则()()()()()p f f p f xy f x f y ===.不妨设()1f x =,则()()()11x f f x f ===,与1x >矛盾. 因此,若p 是质数,则()f p 也是质数.由(1)、(2),有()()()()()()222222f f f f f f ==, 则由()22f 是偶数以及(3),得()222022f ≥. 因为()2f 是质数,所以()21013f ≥.另一方面,设小于2020的且不等于2或1013的质数有t 个,从小到大依次为12t p p p <<⋅⋅⋅<, 大于2020的质数中,最小的t 个从小到大依次为12t q q q <<⋅⋅⋅<考虑如下定义的函数:f N N ++→:()()()()()()11,21013,10132,,1,2,,i i i i f f f f p q f q p i t ======,且对质数t p q >,有()f p p =.对于合数1i ki i y r α==∏,其中质数12k r r r <<⋯<,且12k N ααα+⋯∈、、、,12k i i α=≥∑,有1()(())i ki i f y f r α==∏. 此时,不难验证f 满足(1)、(2).且对于正整数()22020x x ≤≤,若x 为质数,显然()f x x ≠,若x 是合数,设1jlj j x s β==∏,其中质数12l s s s <<⋯<,且121,,,,2ll j j N ββββ+=∈≥∑.于是,由f 的定义知()f x 一定为至少两个,且每个均不小于1013的正整数的乘积, 故()2020f x x ≥≥,则f 满足(3). 综上,知()2f 的最小值为1013.35.(2021·全国·高三竞赛)对每个正整数n ,定义()f n 为从1到n 中所有与n 不互质的正整数的和.求证:若()()f m f n =且m n ≠,则m n -是合数. 【答案】证明见解析 【解析】 【分析】 【详解】首先计算()f n 的表达式,注意到从1到n 中所有与n 互质的正整数有()n ϕ个,并且它们是以t 和n t -的形式成对出现的,因此111()(1)()(1())222f n n n n n n n n ϕϕ=+-⋅=+-.若()()f m f n =且m n ≠,不妨设m n >,则()()()()11m m m n n n ϕϕ+-=+-.① 因为()11n n n m ϕ≤+-≤<,所以(),1m n >.若m n -不为合数,设为质数p ,则()1n kpm p k ==+﹐, ①式变为()()()()()()11111k k p k p k kp kp ϕϕ+++-+=+⎦-⎡⎤⎣.由(),11k k +=,可设()()()()()111,11k p k p lk kp kp l k ϕϕ++-+=+-=+ 其中0l p <<,相减得()()()1k p kp p l ϕϕ+-=+,1k =时, ()()21p p p l ϕ--<+不合题意,所以2k ≥,2p =时,()()()1,1l k p kp p l ϕϕ=+-=+左右奇偶性不同,所以3p ≥.注意()()()()()1,11p kp p k p ϕϕ--+,因此()()1|p p l -+.又0,3l p p <<≥,所以2l p =-,所以()()()121,23k p k p kp k p ϕϕ+=++=-+. 若|p k ,则()|p kp ϕ,所以()3|2p k p -+,所以3p =, 所以()()()12121k p k k p ϕϕ+=+<++,矛盾,同理若()1|p k +也得矛盾,所以()()1121p k k p ϕ-+=++,()()123p k k p ϕ-=-+,②所以()()12k k ϕϕ+-=,于是()1k ϕ+和()k ϕ恰有一个不是4的倍数,必模4余2,但()s ϕ模4余2当且仅当4,,2a a s q q =,这里q 是模4余3的奇质数,a 是正整数,分别代回②知都无解.综上,若()()f m f n =且m n ≠,则m n -是合数.36.(2021·全国·高三竞赛)已知正整数,1n n >,设A 为正整数满足2|1n n A ⎡⎤+⎢⎥⎣⎦,求所有A 的值.([]x 表示不超过x 的最大整数)【答案】当2n =时,3A =,或4,当2n >时,1A n =+. 【解析】 【分析】 【详解】(1)如果2A n >,则211n A ⎡⎤+=⎢⎥⎣⎦,由1n >知,2 1n n A ⎡⎤+⎢⎥⎣⎦;(2)如果2A n =,则212n A ⎡⎤+=⎢⎥⎣⎦,由21n n A ⎡⎤+⎢⎥⎣⎦∣及1n >知2n =,从而4A =;(3)如果20A n <<,则令22n n A r A ⎡⎤=+⎢⎥⎣⎦,其中20r A n ≤<<,即221()n n A A r A ⎛⎫⎡⎤=+-- ⎪⎢⎥⎣⎦⎝⎭. ①当2n A n <<时,222,11n n n n n A A A ⎡⎤⎡⎤<<+<+⎢⎥⎢⎥⎣⎦⎣⎦,由21n n A ⎡⎤+⎢⎥⎣⎦∣,可设21n nH A ⎡⎤+=⎢⎥⎣⎦, 于是1nH n <+,即()11n H -<,这样,只有1H =成立,所以21n n A ⎡⎤+=⎢⎥⎣⎦.代入①式得()2n nA A r =--,即21111n r r A n n n --==+---. 若1r ≠,则11r n --是不小于1的正整数,于是A n ≤,与A n >矛盾, 因此1r =,故1A n =+.当A n =时,211n n A ⎡⎤+=+⎢⎥⎣⎦,由n ∈+N 知211n n n A ⎡⎤+=+⎢⎥⎣⎦;当0A n <<时,由①式及21n n A ⎡⎤+⎢⎥⎣⎦∣知,n A r -∣. 又0,0A n r A n <<≤<<,从而0A r n <-<,矛盾. 综上,当2n =时,3A =,或4,当2n >时,1A n =+.37.(2021·全国·高三竞赛)证明:对任何正整数m ,存在无穷多组整数(),x y ,使得 (1),x y 互质; (2)2|x y m +; (3)2|y x m +. 【答案】证明见解析. 【解析】 【分析】 【详解】显然,当1x y ==时,符合题意.若正整数对()(),x y x y ≤满足条件,由条件(2)可设2xx y m '=+,其中x Z +'∈.下证命题:正整数对(),y x '也满足条件,且y x <'. 由等式2xx y m '=+知,2xx y yx '>≥,即x y '>. 同时还可知,2|x y m '+且()cd ,|g x y m '.若p 是()gcd ,x y '的一个质因子,则有,p m p y .结合条件(3)有2|p x m +,从而有|p x . 这与条件(1)矛盾.故()gcd ,1x y '=.最后,还需证2yx m '+∣.由于gcd(,)1x y =,等价证()22y x x m '+∣. 其中()()()2222220(mod )x x m y m x m m m x y '+=++≡+≡.命题得证,且x y x '>≥.反复利用此命题,便可得到无穷数列{}n a ,其中()212211,n n n a m a a a n a ++++===∈N . 满足1n n a a +>对2n ≥成立,且整数对()()1,n n a a n ++∈N 符合条件.38.(2021·全国·高三竞赛)正整数2n ≥,且n 的素因子个数不超过2,对于任意整数a ,若(),1n a =,则有()mod n a a n ≡成立,求证:n 是质数.【答案】证明见解析. 【解析】 【分析】 【详解】假设n p q αβ=,(其中p q 、均为质数,N αβ∈﹐). 首先证明:p q ≠,若n p γ=(p 为质数,γαβ=+).因为(),1n a =,所以取最小整数δ,使得()1mod a p δγ≡(易知δ为a 对模2p 的阶).又()111(mod )1mod n n an a p γ--≡⇔≡,所以()()1(1),(1)1p p p n p γγγδϕδδ-=--⇔-∣,所以1p δ-∣. 取()()()11111111(1)11mod p p a p p a p p p p p γγγγγγ------=--⇒≡-≡--+≡+,矛盾.所以n p p q γ≠⇒≠.任取与p q 、互质的a , 由Euler 定理知:()()1(mod ),()(1)(1)n an n p q p q ϕαβϕϕ≡==--.从而()()1|1p q δ--,又因为()|(1)|1n p q αβδδ-⇒-,所以()11111p q p q p q αβαβαβδ----+--∣.所以111111(mod )p qp q p q a n αβαβαβ----+--≡,所以()111mod p q a p αβα--≡,所以()111mod q p q a p αα--≡.同理()111mod p q aq αββ--≡.不妨设p q >,则p 一定是奇质数.因此它存在原根g ,满足()11mod q gp α-≡/.因此,一定存在整数k ,使得q kp g α+,取a kp g α=+,矛盾! 结合2n ≥,知n 只能有一个质因子,即n 是质数. 又由Fermat 小定理知,当n 为质数时,满足题意.39.(2021·全国·高三竞赛)设a ,b 为正奇数,定义数列{}n f 如下:1f a =,2f b =,当3n ≥时,n f 为12n n f f --+的最大奇因子.求证:当n 充分大时,n f 为常数,并确定出这个常数. 【答案】a ,b 的最大公约数. 【解析】 【详解】从题目条件可以知道,如果有相邻两项k f ,1k f +相等,则当n k ≥时,n f 全相等,为常数. 用反证法,如果n f 不为常数,则序列{|}n f n N ∈的任意相邻两项不等.由于1n f -,2n f -皆为奇数,则12n n f f --+为偶数.那么,有(){}12121max ,2n n n n n f f f f f ----≤+<,于是,有 {}{}{}3456max ,max ,max ,...a b f f f f >>>.显然,这无限递降正奇数数列不存在,矛盾.所以,必存在正整数k ,使得1k k f f +=,即当n k ≥时,n k f f =.设此常数为C ,由于122an n n f f f --+=,这里a 是个正整数,以及n f ,1n f -,2n f -均为奇数,可知1n f -,2n f -的最大公约数()12,n n f f --等于n f ,1n f -的最大公约数()1,n n f f -.从而,序列中任意相邻两项的最大公约数相同.那么,()(),...,C C C a b ===,即这常数为a ,b 的最大公约数.40.(2020·全国·高三竞赛)设12121,2,2,3,4,n n n a a a a a n --===+=证明:对整数5n ≥,n a ,必有一个模4余1的素因子. 【答案】证明见解析. 【解析】 【分析】不妨记11αβ==由递推式及数学归纳法得到n a 有奇素因子p ,然后对正整数进行讨论,证明也存在模4余1的素因子. 【详解】证明:记11αβ=+=-n n n a αβαβ-=-.记2n nn b αβ+=,则数列{}n b 满足122(3)n n n b b b n --=+≥ ①因121,3b b ==均为整数,故由①及数学归纳法,可知{}n b 每项均为整数.由222()22n n n n n αβαβαβαβαβ⎛⎫⎛⎫+--⎛⎫-= ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭, 可知222(1)(1)nn n b a n -=-≥ ②当1n >为奇数时,由于1a 为奇数,故由{}n a 的递推式及数学归纳法,可知n a 为大于1的奇数,所以n a 有奇素因子p .由②得21(mod )n b p ≡-,故112(1)(mod )p p n b p --≡-.又上式表明(),1n p b =,故由费马小定理得11(mod )p n b p -≡,从而12(1)1(mod )p p --≡.因2p >,故必须12(1)1p --=,因此1(mod 4)p ≡.另一方面,对正整数m ,n ,若|m n ,设n km =,则()(1)(2)(2)(1)n n m mk m k m m m k m k m n a αβαβααβαββαβαβ------==⋅++++--()0(212)(212)1(22)(22)1()(),2=(()(),21i im l i m l i m m l i lm im l i m l i m m l a k l a k l αβαβαβαβαβ=-----=---⎧⋅∑+=⎪⎨⎪⋅∑++=+⎩因2s ss b αβ+=为整数(对正整数s ),1αβ=-为整数,故由上式知n a 等于m a 与一个整数的乘积,从而|m n a a .因此,若n 有大于1的奇因子m ,则由前面已证得的结论知m a 有素因子1(mod 4)p ≡,而|m n a a ,故|n p a ,即n a 也有模4余1的素因子.最后,若n 没有大于1的奇因子,则n 是2的方幂.设2(3)l n l =≥, 因84082417a ==⨯有模4余1的素因子17,对于4l ≥,由8|2l 知82|l a a , 从而2l a 也有素因子17.证毕. 【点睛】关键点点睛:本题证明的关键是能够运用数论整除的相关知识以及费马小定理进行证明,不漏掉情况.41.(2019·江苏·高三竞赛)设k 、l 、c 均为正整数,证明:存在正整数a 、b 满足(,)b ac a b -=⋅,且()(),(,)a b l kb a a b a b ττττ⋅=⋅⎛⎫⎛⎫ ⎪ ⎪⎝⎭⎝⎭,其中(a ,b )表示a 、b 的最大公因数,()m τ表示正整数m 的所有不同正因子的个数. 【答案】见解析 【解析】 【详解】如果m 的标准分解式为1212n n n m p p p ααα=,那么()()()12()111n m τααα=+++.取定两个不同的素数p 、q 使得(pq ,c )=1.由于(p ,q )=1,利用裴蜀定理,存在正整数00,u v ,使得00k lp u q v c -=.由于(pq ,c )=1,那么0p v 且0q u . 由中国剩余定理,下列同余方程组:0001(mod )1(mod )1(mod )l kl u tq p v tp q u tq c ⎧+≡⎪+≡⎨⎪+≡⎩有正整数解t t =0. 令0000,l ku u t q v v t p =+=+,那么k l p u q v c -=,而且(u ,pqc )=1.因此(,)1,(,)1v pqc u v ==.现在取2211,k l l d p q n q v --==,则l k n c q v c p u +=+=. 从而(,)1n n c +=.令a =nd ,b =(n +c )d ,那么(a ,b )=d ,因此(,)b a cd c a b -==⋅.而且:()()2211()()(),k ll l p q va nd l l la n q v ab ττττττ-+-⋅=⋅=⋅⎛⎫⎪⎝⎭()22221k l l l k l l +==+.()()2211()(())(),kk l kp qub ncd k k k b n c p u a b ττττττ+--+⋅=⋅=⋅+⎛⎫⎪⎝⎭()22221kk l k k l k +==+.所以()()(,)(,)a b l ka b a b a b ττττ⋅=⋅⎛⎫⎛⎫ ⎪ ⎪⎝⎭⎝⎭.42.(2019·江西·高三竞赛)试求所有由互异正奇数构成的三元集{a ,b ,c },使其满足:2222019a b c ++=.【答案】7个,{1,13,43},{7,11,43},{13,25,35},{5,25,37},{}11,23,37,{17,19,37},{7,17,41}. 【解析】 【详解】据对称性,不妨设a <b <c ,由于奇平方数的末位数字只具有1、5、9形式,于是222,,a b c 的末位数字,要么是5、5、9的形式,要么是1、9、9的形式.又知,如果正整数n 是3的倍数,那么n 2必是9的倍数;如果n 不是3的倍数,那么n 2被3除余1.由于2019是3的倍数,但不是9的倍数,因此奇数a 、b 、c 皆不是3的倍数. 注意[2019]44c =,即奇数c ≤43,而222232019c a b c >++=, 即c 2>673,且c 不是3的倍数,故奇数c ≥29. 因此奇数{29,31,35,37,41,43}c ∈.。
ACM数论
4
Eratosthenes筛法
2)给定一个范围(求这个范围内的素 数),进行如下步骤: 0.从2开始,2是第一个素数。也是第一 个新素数。取出2。 1.筛掉所有新素数的倍数。 2.留下来的数里面第一个(最小的)是 新素数。取出这个新素数。 3.重复1和2直到没有数存在。
17
扩展欧几里德算法:
EXTENDED-EUCLID(a, b) if b = 0 then return (a, 1, 0) (d’,x’,y’) ← EXTENDEDEUCLID(b, a%b) (d, x, y) ← (d’, y’, x’ – (a/b) * y’) return (d, x, y)
41
元素的幂
3k mod 7为:
i 0 1 2 3 4 5 6 7 8 9 10 11 3k mod 7 1 3 2 6 4 5 1 3 2 6 4 5 i 0 1 2 3 4 5 6 7 8 9 10 11 2k mod 7 1 2 4 1 2 4 1 2 4 1 2 4
需要保存p112个二元组生成这些二元组需要的时间为op112对二元组进行排序需要的时间为ologp112p112第5步的循环最多执行p112次每次如果采用二分查找来寻找指定元素那么总的时间复杂度为op112logp11239离散对数例
ACM 数论 zzsycqs@
1
初等数论的概念
整除性和约数: 假设d和a是整数,d|a(读作d整除a), 意味着存在某个整数k,有a=kd。 如果d|a,并且d≥0,则称d是a的约数。 每个整数a都可以被其平凡约数1和a整除, a的非平凡约数也称为a的因子。
50道经典编程题目
【程序1】题目:古典问题:有-对兔子,从出生后第3个月起每个月都生-对兔子,小兔子长到第三个月后每个月又生-对兔子,假如兔子都不死,问每个月地兔子总数为多少//这是-个菲波拉契数列问题}}}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数.程序分析:判断素数地方法:用-个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数.}}【程序3】题目:打印出所有地 "水仙花数 ",所谓 "水仙花数 "是指-个三位数,其各位数字立方和等于该数本身.例如:153是-个 "水仙花数 ",因为153=1地三次方+5地三次方+3地三次方.}}【程序4】题目:将-个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.程序分析:对n进行分解质因数,应先找到-个最小地质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数地过程已经结束,打印出即可.(2)如果n <> k,但n能被k整除,则应打印出k地值,并用n除以k地商,作为新地正整数你n,重复执行第-步.(3)如果n不能被k整除,则用k+1作为k地值,重复执行第-步.【程序5】题目:利用条件运算符地嵌套来完成此题:学习成绩> =90分地同学用A表示,60-89分之间地用B表示,60分以下地用C表示.【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数./**在循环中,只要除数不等于0,用较大数除以较小地数,将小地-个数作为下-轮循环地大数,取得地余数作为下-轮循环地较小地数,如此循环直到较小地数地值为0,返回较大地数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数.* /}【程序7】题目:输入-行字符,分别统计出其中英文字母、空格、数字和其它字符地个数.}【程序8】题目:求s=a+aa+aaa+aaaa+aa...a地值,其中a是-个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制.}【程序9】题目:-个数如果恰好等于它地因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程找出1000以内地所有完数.}【程序10】题目:-球从100米高度自由落下,每次落地后反跳回原高度地-半;再落下,求它在第10次落地时,共经过多少米第10次反弹多高【程序11】题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字地三位数都是多少【程序12】题目:企业发放地奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元地部分按10%提成,高于10万元地部分,可可提成7.5%;20万到40万之间时,高于20万元地部分,可提成5%;40万到60万之间时高于40万元地部分,可提成3%;60万到100万之间时,高于60万元地部分,可提成1.5%,高于100万元时,超过100万元地部分按1%提成,从键盘输入当月利润,求应发放奖金总数}【程序13】题目:-个整数,它加上100后是-个完全平方数,再加上168又是-个完全平方数,请问该数是多少/*按题意循环应该从-100开始(整数包括正整数、负整数、零),这样会多-个满足条件地数-99.但是我看到大部分人解这道题目时都把题中地"整数"理解成正整数,我也就随大流了.*/ 【程序14】题目:输入某年某月某日,判断这-天是这-年地第几天【程序15】题目:输入三个整数x,y,z,请把这三个数由小到大输出.}【程序16】题目:输出9*9口诀.【程序17】题目:猴子吃桃问题:猴子第-天摘下若干个桃子,当即吃了-半,还不瘾,又多吃了-个第二天早上又将剩下地桃子吃掉-半,又多吃了-个.以后每天早上都吃了前-天剩下地-半零-个.到第10天早上想再吃时,见只剩下-个桃子了.求第-天共摘了多少.【程序18】题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛地名单.a说他不和x比,c说他不和x,z比,请编程序找出三队赛手地名单.【程序19】题目:打印出如下图案(菱形)【程序20】题目:有-分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列地前20项之和.【程序21】题目:求1+2!+3!+...+20!地和【程序22】题目:利用递归方法求5!.【程序23】题目:有5个人坐在-起,问第五个人多少岁他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第-个人大两岁.最后问第-个人,他说是10岁.请问第五个人多大【程序24】题目:给-个不多于5位地正整数,要求:-、求它是几位数,二、逆序打印出各位数字. //使用了长整型最多输入18位【程序25】题目:-个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同.【程序26】题目:请输入星期几地第-个字母来判断-下是星期几,如果第-个字母-样,则继续判断第二个字母.【程序27】题目:求100之内地素数【程序28】题目:对10个数进行排序【程序29】题目:求-个3*3矩阵对角线元素之和【程序30】题目:有-个已经排好序地数组.现输入-个数,要求按原来地规律将它插入数组中.//此程序不好,没有使用折半查找插入【程序31】题目:将-个数组逆序输出.【程序32】题目:取-个整数a从右端开始地4~7位.【程序33】题目:打印出杨辉三角形(要求打印出10行如下图)1111211 3 3 11 4 6 4 11 5 10 10 5 1............【程序34】题目:输入3个数a,b,c,按大小顺序输出.【程序35】题目:输入数组,最大地与第-个元素交换,最小地与最后-个元素交换,输出数组.}【程序36】题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面地m个数【程序37】题目:有n个人围成-圈,顺序排号.从第-个人开始报数(从1到3报数),凡报到3地人退出圈子,问最后留下地是原来第几号地那位.【程序38】题目:写-个函数,求-个字符串地长度,在main函数中输入字符串,并输出其长度.【程序39】题目:编写-个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)//没有利用指针函数【程序40】题目:字符串排序.【程序41】题目:海滩上有-堆桃子,五只猴子来分.第-只猴子把这堆桃子凭据分为五份,多了-个,这只猴子把多地-个扔入海中,拿走了-份.第二只猴子把剩下地桃子又平均分成五份,又多了-个,它同样把多地-个扔入海中,拿走了-份,第三、第四、第五只猴子都是这样做地,问海滩上原来最少有多少个桃子【程序42】题目:809* =800* +9* +1其中代表地两位数,8* 地结果为两位数,9* 地结果为3位数.求代表地两位数,及809* 后地结果.//题目错了!809x=800x+9x+1这样地方程无解.去掉那个1就有解了.【程序43】题目:求0-7所能组成地奇数个数.//组成1位数是4个.//组成2位数是7*4个.//组成3位数是7*8*4个.//组成4位数是7*8*8*4个.//......【程序44】题目:-个偶数总能表示为两个素数之和.//由于用除sqrt(n)地方法求出地素数不包括2和3,//因此在判断是否是素数程序中人为添加了-个3.【程序45】题目:判断-个素数能被几个9整除//题目错了吧能被9整除地就不是素数了!所以改成整数了.【程序46】题目:两个字符串连接程序【程序47】题目:读取7个数(1-50)地整数值,每读取-个值,程序打印出该值个数地*.【程序48】题目:某个公司采用公用电话传递数据,数据是四位地整数,在传递过程中是加密地,加密规则如下:每位数字都加上5,然后用和除以10地余数代替该数字,再将第-位和第四位交换,第二位和第三位交换【程序49】题目:计算字符串中子串出现地次数【程序50】题目:有五个学生,每个学生有3门课地成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,把原有地数据和计算出地平均分数存放在磁盘文件 "stud "中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int main()
{
while( true )
{
int num;
scanf("%d",&num );
if ( num == 0 )
{
break;
}
while( true )
{
if ( SmithNumber(++num))
number /= i;
i = 2;
}
else
{
++i;
}
//以上的代码做了无谓的计算,可用下面的代码,更新于20090904
//while( number % i == 0 )
//{
// sum += sum(i);
然后就很简单的将数字各质因数的各位加起来,看和是否等于该数字的各位和,如果相等那它可能就是SmithNumber,为什么说只是可能呢,因为这个数可能是质数,但是质数不是SmithNumber。
#include <stdio.h>
#include <math.h>
int Sum( int number )
int m_Input, m_Num_Max, m_Num_Min, m_InputToTwo;
// 总体输出
char m_Output[ 1000000 ];
memset( m_Output, 0, 1000000 );
{
if(b==0)
{
x=1;
y=0;
return a;
}
__int64 r=exGcd(b, a%b);
__int64 t=x;
x=y;
y=t-a/b*y;
return r;
}
int main()
{
scanf("%I64d %I64d %I64d %I64d %I64d",&xx,&yy,&mm,&nn,&l);
= b * x' + (a - a / b * b) * y'
= a * y' + b * (x' - a / b * y')
{
int sum = 0;
while( number != 0 )
{
sum += number % 10;
number /= 10;
}
return sum;
}
bool SmithNumber( int number )
{
int i = 2;
int temp = number;
= a * x + b * y
则:x = y'
y = x' - a / b * y'
以上内容转自/redcastle/blog/item/934b232dbc40d336349bf7e4.html
// number /= i;
//}
// ++i;
}
sum += Sum( number );
if ( sum == sumOfNumber && number != temp )
{
return true;
}
else
{
return false;
}
}
int sumOfNumber = Sum( number );
int sum = 0;
while( i <= (int)sqrt( (double)number ) )
{
if ( number % i ==0 )
{
sum += Sum( i );
欧几里德算法
int Euclid(int a,int b)
{
if(b == 0)
return a;
else
return Euclid(b,mod(a,b));
}
附:取模运算
int mod(int a,int b)
{
if(a >= 0)
// 标识 m_Output 的 Pos
int m_Output_Pos = 0;
// 是否找到标识
bool b_Find;
// 栈
stack<int> m_Stack;
int t = x;
x = y;
y = t - a / b * y;
return r;
}
代码:
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
思路:要寻找大于给定数字且最接近给定数字的SmithNumber,只要将给定数字不断的加1,判断它是否是SmithNumber就行了,如果是SmithNumber就立即输出。
但是如何判断是否是SmithNumber呢?首先就是要对数字进行质因数分解。质因数分解要保证因子都是质数。这里先介绍一个如何判断一个数int是否是质数呢,如果对于这个数,i = 2.....sqrt(int)都不是它的约数,那int就是一个质数。所以我们可以将i初始化为2,然后不断递增i,看i是否是int的一个约数,如果是的话那i就是int的一个质因数(因为这个数是从2开始第一个可以整除int的数,它不可能是一个可以分解的合数,否则,它的约数在它之前就整除int),然后将int除以该质因数,重置i为2,重新对int判断它是否是质数。这样最后剩下的int一定是一个质数,从而对int进行了质因数分解
什么是SmithNumber?
用sum(int)表示一个int的各位的和,那一个数i如果是SmithNumber,则sum(i) = sigma( sum(Pj )),Pj表示i的第j个质因数。例如4937775= 3*5*5*65837,4+9+3+7+7+7+5 = 42,3+5+5+(6+5+8+3+7) = 42,所以4937775是SmithNumber。
if( x % i == 0)
return 0;
return 1;
}
int main()
{
// 输入数,输入数 / 2 向上延伸,输入数 / 2 向下延伸,输入数 / 2
// 判断是否为质数的函数
int IsPrime ( int x )
{
int i;
if( x < 2 )
return 0;
for( i = 2; i <= (int) ( sqrt( (double)x + 0.5 ) ); i++ )
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stack>
#include <memory.h>
#include <string.h>
using namespace std;
// m_Input 肯定是一个偶数
m_InputToTwo = m_Input / 2;
// 置值
m_Num_Max = m_Input - 1;
__int64 mm,nn,xx,yy,l;
__int64 c,d,x,y;
__int64 modd(__int64 a, __int64 b)
{
if(a>=0)
return a%b;
else
return a%b+b;
}
__int64 exGcd(__int64 a, __int64 b)
}
l=l/d;
x=modd(x*c/d,l); ///取模函数要注意
printf("%I64d\n",x);
system("pause");
return 0;
}
POJ 1142 SmithNumber
题意:寻找最接近而且大于给定的数字的SmithNumber
return a % b;
else
return a % b + b;
}
第二个问题:求解ax + by = gcd(a,b)
定理二:ax + by = gcd(a,b)= gcd(b,a mod b) = b * x' + (a mod b) * y'
由这个可以得出扩展的欧几里德算法:
int exGcd(int a, int b, int &x, int &y)
{
if(b == 0)
{
x = 1;
y = 0;
return a;
}
int r = exGcd(b, a % b, x, y);
{
printf("%d\n", num);
break;
}
}
}
return 0;
}
ACM——POJ 2262(Goldbach's Conjecture)