数论类编程题.docx

上传人:b****7 文档编号:10803575 上传时间:2023-02-23 格式:DOCX 页数:26 大小:21.75KB
下载 相关 举报
数论类编程题.docx_第1页
第1页 / 共26页
数论类编程题.docx_第2页
第2页 / 共26页
数论类编程题.docx_第3页
第3页 / 共26页
数论类编程题.docx_第4页
第4页 / 共26页
数论类编程题.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数论类编程题.docx

《数论类编程题.docx》由会员分享,可在线阅读,更多相关《数论类编程题.docx(26页珍藏版)》请在冰豆网上搜索。

数论类编程题.docx

数论类编程题

1.素数

1.[100,999]范围内同时满足以下两个条件的十进制数.⑴其个位数字与十位数字之和除以10所得的余数是百位数字;⑵该数是素数;求有多少个这样的数?

15

#include

intprime(intx)

{inti,k;

if(x<2)

return(0);

k=sqrt(x);

for(i=2;i<=k;i++)

if(x%i==0)

break;

if(i>k)return

(1);

elsereturn(0);

}

main()

{inti,n=0,a,b,c;

for(i=100;i<=999;i++)

{a=i/100;

b=i%100/10;

c=i%10;

if((b+c)%10==a&&prime(i))

n++;

}

printf("Totalis:

%d",n);

}

 

3.除1和它本身外,不能被其它整数整除的正整数称为素数(注:

1不是素数,2是素数)。

若两素数之差为2,则称两素数为双胞胎数,问[31,601]之间有多少对双胞胎数。

22

#include

intprime(intx)

{inti,k;

if(x<2)

return(0);

k=sqrt(x);

for(i=2;i<=k;i++)

if(x%i==0)

break;

if(i>k)return

(1);

elsereturn(0);

}

main()

{inti,n=0;

for(i=31;i<=599;i++)

if(prime(i)&&prime(i+2))n++;

printf("Totalis:

%d\n",n);

}

4.数学家哥德巴赫曾猜测:

任何大于6的偶数都可以分解成两个素数(素数对)的和。

但有些偶数可以分解成多种素数对的和,如:

10=3+7,10=5+5,即10可以分解成两种不同的素数对。

试求6744可以分解成多少种不同的素数对(注:

A+B与B+A认为是相同素数对)144

#include

intprime(intx)

{inti,k;

if(x<2)

return(0);

k=sqrt(x);

for(i=2;i<=k;i++)

if(x%i==0)

break;

if(i>k)return

(1);

elsereturn(0);

}

main()

{inti,n;

n=0;

for(i=31;i<=599;i++)

if(prime(i)&&prime(i+2))n++;

printf("Totalis:

%d\n",n);

}

8.求[100,900]之间相差为12的素数对(注:

要求素数对的两个素数均在该范围内)的个数。

50

#include

intprime(intx)

{inti,k;

if(x<2)

return(0);

k=sqrt(x);

for(i=2;i<=k;i++)

if(x%i==0)

break;

if(i>k)return

(1);

elsereturn(0);

}

main()

{inti,n=0;

for(i=100;i<=900-12;i++)

if(prime(i)&&prime(i+12))n++;

printf("Totalis:

%d\n",n);

}

9.一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:

1不是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数。

例如,617,17,7都是素数,因此617是逆向超级素数,但尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。

试求[100,999]之内的所有逆向超级素数的和。

21645

#include

intprime(intx)

{inti,k;

k=sqrt(x);

for(i=2;i<=k;i++)

if(x%i==0)break;

if(i>k)return

(1);

elsereturn(0);}

main()

{inti,s=0;

intprime(intx);

for(i=100;i<=999;i++)

if(prime(i)&&prime(i%100)&&prime(i%10))

if((i%100/10!

=0)&&(i%10!

=0)&&(i%10!

=1))s=s+i;

printf("Totalis:

%d\n",s);

}

14

13.一个素数,依次从个位开始去掉一位,二位.....,所得的各数仍然是素数,称为超级素数。

求[100,999]之内超级素数的个数。

14

#include

intprime(intx)

{inti,k;

if(x<2)

return(0);

k=sqrt(x);

for(i=2;i<=k;i++)

if(x%i==0)

break;

if(i>k)return

(1);

elsereturn(0);

}

main()

{inti,s=0;

for(i=200;i<=999;i++)

if(prime(i)&&prime(i/100)&&prime(i/10))

s++;

printf("Totalis:

%d\n",si);

}

14.若两个连续的自然数的乘积减1后是素数,则称此两个连续自然数为友数对,该素数称为友素数。

例如,由于8*9-1=71,因此,8与9是友数对,71是友素数。

求[100,200]之间的第10个友素数对所对应的友素数的值(按由小到大排列)。

17291

#include

intprime(intx)

{inti,k;

if(x<2)

return(0);

k=sqrt(x);

for(i=2;i<=k;i++)

if(x%i==0)

break;

if(i>k)return

(1);

elsereturn(0);

}

main()

{inti,s=0;

for(i=100;i<=200;i++)

if(prime(i*(i+1)-1))

{s++;

if(s==10)break;}

printf("Totalis:

%d\n",i*(i+1)-1);

}

18.梅森尼数是指能使2^n-1为素数的数n,求[1,21]范围内有多少个梅森尼数?

7

#include

intprime(longx)

{longk;

longi;

if(i<2)

return(0);

k=sqrt(x);

for(i=2;i<=k;i++)

if(x%i==0)break;

if(i>k)return

(1);

elsereturn(0);

}

main()

{inti,s=0;

for(i=1;i<=21;i++)

if(prime((long)(pow(2,i))-1)&&((long)(pow(2,i)-1)!

=1)&&((long)(pow(2,i)-1)!

=0))

{s++;

printf("\nTotalis:

%d,%ld\n",s,(long)(pow(2,i))-1);}

}

2.取数字

21.设某四位数的千位数字平方与十位数字的平方之和等于百位数字的立方与个位数字的立方之和,例如,对于四位数:

3201,3^2+0^2=2^3+1^3,试问所有这样的四位数之和是多少?

97993

main()

{longi,k=0;

inta,b,c,d;

for(i=1000;i<=9999;i++)

{a=i/1000;

b=i%1000/100;

c=i%100/10;

d=i%10;

if(a*a+c*c==b*b*b+d*d*d)k=k+i;

}

printf("okThenumis:

%ld\n",k);

}

24.求[1,999]之间能被3整除,且至少有一位数字是5的所有正整数的个数。

91

main()

{inti,k=0;

inta,b,c;

for(i=1;i<=999;i++)

{a=i/100;

b=i%100/10;

c=i%10;

if((i%3==0)&&(a==5||b==5||c==5))

k=k+1;

}

printf("Thenumis:

%d",k);

}

25.有一个三位数满足下列条件:

(1)此三位数的三位数字各不相同;

(2)此三位数等于它的各位数字的立方和。

试求所有这样的三位数中最大的一个是多少?

407

main()

{inti,max=0;

inta,b,c;

for(i=100;i<=999;i++)

{a=i/100;

b=i%100/10;

c=i%10;

if((a*a*a+b*b*b+c*c*c==i)&&(a!

=b&&b!

=c&&a!

=c))

if(max

}

printf("Thenumis:

%d\n",max);

}

28.所谓“水仙花数”是指一个三位数,其各位数字的三次方之和等于该数本身,例如:

153=1^3+3^3+5^3,故153是水仙花数,求[100,999]之间所有水仙花数之和。

1301

main()

{inti,k=0;

inta,b,c;

for(i=100;i<=999;i++)

{a=i/100;

b=i%100/10;

c=i%10;

if((a*a*a+b*b*b+c*c*c==i))

k=k+i;

}

printf("Thenumis:

%d\n",k);

}

30.回文数是指正读和反读都一样的正整数。

例如3773是回文数。

求出[1000,9999]以内的所有回文数的个数。

90

main()

{longi,k=0;

inta,b,c,d;

for(i=1000;i<=9999;i++)

{a=i/1000;

b=i%1000/100;

c=i%100/10;

d=i%10;

if(d*1000+c*100+b*10+a==i)k=k+1;

}

printf("okThenumis:

%ld\n",k);

}

3.分硬币

31.把一张一元钞票,换成一分、二分和五分硬币,每种至少8枚,问有多少种方案?

80

#include

main()

{inti,j,k,s=0;

for(i=8;i<=50;i++)

for(j=8;j<=50;j++)

for(k=8;k<=20;k++)

if(i+2*j+5*k==100)s=s+1;

printf("Thenumis:

%d\n",s);

}

34.马克思曾经做过这样一道趣味数学题:

有30个人在一家小饭店里用餐,其中有男人、女人和小孩,每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,共花去50先令。

如果要求男人、女人和小孩都有人参与,试求有多少种方案分配男人、女人和小孩的人数。

9

main()

{inti,k=0;

inta,b,c;

for(a=1;a<=30;a++)

for(b=1;b<=30;b++)

if((a*3+b*2+(30-a-b)==50)&&(a+b<30))k++;

printf("Thenumis:

%d\n",k);

}

4.勾股、弦数

35.A,B,C是三个小于或等于100正整数,当满足1/A^2+1/B^2=1/C^2关系时,称为倒勾股数。

求130B>C的倒勾股数有多少组。

1

main()/*p2_2*/

{inti,a,b,c,n=0;

for(c=1;c<=50;c++)

for(b=c+1;b<=100;b++)

for(a=b+1;a<=100;a++)

{i=a+b+c;

if(i>100&&i<150&&(1.0/(a*a)+1.0/(b*b)==1.0/(c*c)))

{n++;

printf("%d,%d,%d:

",a,b,c);}

}

printf("nis:

%d\n",n);

}

 

39.勾股弦数是满足公式:

A^2+B^2=C^2(假定A

3^2+4^2=5^2。

求A,B,C均小于或等于100的勾股弦数中A+B+C的最大值。

240

main()

{intmax=0,a,b,c;

for(a=1;a<=100;a++)

for(b=a+1;b<=100;b++)

for(c=b+1;c<=100;c++)

{if(a*a+b*b==c*c)

{if(max

printf("%d,%d,%d:

",a,b,c);}

}

printf("oknis:

%d\n",max);

}

40若某整数平方等于某两个正整数平方之和的正整数称为弦数。

例如:

由于3^2+4^2=5^2,则5为弦数,求[100,200]之间弦数的个数。

77

#include

main()

{inti,j,k,n=0;

for(k=100;k<=200;k++)

for(i=1;i

for(j=i+1;j

if(i*i+j*j==k*k)

{n++;printf("%d:

%d,%d,%d\n",n,i,j,k);}

printf("nis:

%d\n",n);

}

41若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。

例如:

由于3^2+4^2=5^2,则5为弦数,求[131,200]之间最小的弦数。

135

#include

main()

{inti,j,k,min=200;

for(k=131;k<=200;k++)

for(j=1;j

for(i=j+1;i

if(i*i+j*j==k*k)

{if(min>k)min=k;break;}

printf("minis:

%d\n",min);

}

5.完数因子

42求在[10,1000]之间的所有完数之和。

各真因子之和(不包括自身)等于其本身的正整数称为完数。

例如:

6=1+2+3,6是完数。

524

#include

main()

{intm,s,i;

longsum=0;

for(m=10;m<=1000;m++)

{s=0;

for(i=1;i

if(m%i==0)s=s+i;

if(s==m)sum=sum+m;}

printf("%ld",sum);

}

}43一个数如果恰好等于它的所有真因子之和,这个数就称为“完数”。

例如,6的真因子为1,2,3,而6=1+2+3,因此,6是“完数”。

求[1,1000]之间的最大完数。

496

#include

intwan(intx)

{inti,s=1;

for(i=2;i<=x-1;i++)

if(x%i==0)s=s+i;

if(s==x)return

(1);

elsereturn(0);

}

main()

{inti;

for(i=1000;i>=1;i--)

if(wan(i))break;

printf("Totalis:

%d",i);

}

47求[200,300]之间第二大有奇数个不同因子的整数(在计算因子个数时,包括该数本身)。

256

#include

main()

{intx,k=0,i,s;

for(x=300;x>=200;x--)

{s=0;

for(i=1;i<=x;i++)

if(x%i==0)s=s+1;

if(s%2==1)k++;

if(k==2)break;

}

printf("Totalis:

%d",x);

}

48已知24有8个正整数因子(即:

1,2,3,4,6,8,12,24),而24正好能被其因子数8整除,求正整数[10,100]之间有多少个正整数能被其因子的个数整除。

12

#include

main()

{intx,k=0,i,s;

for(x=10;x<=100;x++)

{s=0;

for(i=1;i<=x;i++)

if(x%i==0)s=s+1;

if(x%s==0)k++;

}

printf("Totalis:

%d",k);

}

 

50当m的值为50时,计算下列公式之值:

t=1+1/2^2+1/3^2+…+1/m^2

(按四舍五入的方式精确到小数点后第四位)。

1.6251

main()

{intm;

floatt=0;

for(m=1;m<=50;m++)

t=t+1.0/(m*m);

printf("tis:

%f",t);

}

53利用格里高利公式:

α/4=1-1/3+1/5-1/7+1/9-1/11+…-1/99,求α的值。

要求:

按四舍五入的方式精确到小数点后第二位。

3.12

main()

{inti,b=-1;

floata=0;

for(i=1;i<=99;i=i+2)

{b=-b;

a=a+b*1.0/i;

}

printf("Thenumis:

%10.2f",4*a);}

61求数列:

2/1,3/2,5/3,8/5,13/8,21/13,……前50项之和(注:

此数列从第二项开始,其分子是前一项的分子与分母之和,其分母是前一项的分子)。

(按四舍五入的方式精确到小数点后第二位)83.24

main()

{inti,fz=2,fm=1,temp;

floats=0;

for(i=1;i<=50;i++)

{s=s+(float)fz/fm;

temp=fz;

fz=fz+fm;

fm=temp;}

printf("Thenumis:

%10.2f",s);}

 7.平方数 

64若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是“四位双平方数”。

例如:

由于7396=86^2,且7+3+9+6=25=5^2,则称7396是“四位双平方数”。

求所有“四位双平方数”之和。

81977

#include

main()

{longi,k,s=0;

inta,b,c,d;

for(i=1000;i<=9999;i++)

{a=i/1000;

b=i%1000/100;

c=i%100/10;

d=i%10;

k=a+b+c+d;

if((int)sqrt(i)==sqrt(i)&&(int)sqrt(k)==sqrt(k))s=s+i;}

printf("okThenumis:

%ld\n",s);}

65自然数对是指两个自然数的和与差都是平方数,如8和17的和8+17=25与其差17-8=9都是平方数,则称8和17是自然数对(8,17)。

假定(A,B)与(B,A)是同一个自然数对且假定A>=B,求所有小于或等于100(即:

A<=100,B<=100,A<>B,A和B均不为0)的自然数对中B之和。

1160

#include

main()

{inta,b,s=0;

for(b=1;b<=100;b++)

for(a=b+1;a+b<=100;a++)

{if((int)sqrt(a+b)==sqrt(a+b)&&(int)sqrt(a-b)==sqrt(a-b))

{s=s+b;

printf("okThenumis:

%d+%d=%d\n",a,b,s);}}}

67所谓“同构数”是指这样一个数,它出现在它的平方数的右侧,例如5的平方是25,25的平方是625,故5和25都是同构数,求[2,1000]之间所有同构数之和。

1113

#include

main()

{inti,j,s=0;

for(i=2;i<=1000;i++)

for(j=1;j<=6;j++)

if(i*i%((long)pow(10,j))==i)

{s=s+i;

printf("Thenumis:

\n%d,%d,%d\n",i,j,s);}}

76已知Fibonacci数列:

1,1,2,3,5,8,……,它可由下面公式表述:

F

(1)=1ifn=1

F

(2)=1ifn=2

F(n)=F(n-1)+F(n-2)ifn>2

试求F

(1)+F(3)+F(5)+……+F(49)值。

提示:

最好使用递推法求解,因为使用递归调用很可能超出某些语言的递归深度。

12586269025

main()

{floatf[50],*p,s;

s=0;

f[1]=1;

f[2]=1;

for(p=f+3;p<=f+49;p++)

{*p=*(p-1)+*(p-2);}

for(p=f+1;p<=f+49;p+=2)

{s=s+*p;

}

printf("%12.0f\n",s);}

main()

{

doublef[50],s;

inti;

s=1;

f[1]=1;

f[2]=1;

for(i=3;i<=49;i++)

{f[i]=f[i-1]+f[i-2];}

for(i=1;i<=49;i+=2)

{s=s+f[i];

}

printf("%12.0lf\n",s);

}

80已知S1=2,S2=2+4,S3=2+4+6,S4=2+4+6+8,S5=2+4+6+8+10,…,求S=S1+S2+S3+S4+S5+…+S20的值。

3080

main()

{inti,j,s=0,num=0;

for(i=1;i<=20;i++)

{s=s+2*i;

num=num+s;

}

printf("numis:

%d",num);}

 9.a,b,c,d,e类 

83设有十进制数字a,b,c,d和e,它们满足下列式子:

abcd*e=bcde(a不等于0,e不等于0或1),求满足上述条件的四位数abcd

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1