ACM模拟题详解(2)——简单数论

ACM:数论专题(1)——素数的判定 (P.S: God!!!!!! 当前人类对于数学的研究所达到的高度已经远远超出了一个外行人所理解的程度, 俺是这么想的。。。。。。 ) 题目要求:     题目要求给定一个数字n,判定其是否为素数(n≤10^18)。素数:对于某个数字n,如果在所有不大于n的正整数中,只有1和n本身可以整除n,则n是一个素数。 解答:     素数的判定具有多种方法。     最朴素的方式是: 阅读详情

    有很多与数字相关的题目,主要考察基本的编程能力,如果数学比较好,对于解决这些问题有比较好的帮助。下面的题目是学生收集的题目,我进行了讲解。

1、Self Numbers

Description

In 1949 the Indian mathematician D.R. Kaprekar discovered a class of numbers called self-numbers. For any positive integer n, define d(n) to be n plus the sum of the digits of n. (The d stands for digitadition, a term coined by Kaprekar.) For example, d(75) = 75 + 7 + 5 = 87. Given any positive integer n as a starting point, you can construct the infinite increasing sequence of integers n, d(n), d(d(n)), d(d(d(n))), .... For example, if you start with 33, the next number is 33 + 3 + 3 = 39, the next is 39 + 3 + 9 = 51, the next is 51 + 5 + 1 = 57, and so you generate the sequence 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... The number n is called a generator of d(n). In the sequence above, 33 is a generator of 39, 39 is a generator of 51, 51 is a generator of 57, and so on. Some numbers have more than one generator: for example, 101 has two generators, 91 and 100. A number with no generators is a self-number. There are thirteen self-numbers less than 100: 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, and 97.

Input

No input for this problem.

Output

Write a program to output all positive self-numbers less than 10000 in increasing order, one per line.

Sample Input

Sample Output

1
3
5
7
9
20
31
42
53
64
 |
 |       <-- a lot more numbers
 |
9903
9914
9925
9927
9938
9949
9960
9971
9982
9993

 

题目翻译:有这样的公式y=d(x1x2…xn)=x1+x2+…+xn+ x1x2…xn,例如:

d(123) = 123+1+2+3=129

d(55)=55+5+5=65

这里把x1x2…xn称为y的生成子,例如123是129的生成子,55是65的生成子。题目要求列出10000以内没有生成子的整数。

 

题目详解:对1到10000的生成子进行遍历,看能够生成哪些数字,然后把不能生成的输出即可,下面的代码供参考。

       public static void setNumbers(){
              int[] numbers=new int[10000];
              Arrays.fill(numbers, 0);
              for(int i=1;i<10000;i++){
                     int temp = i+i%10+(i/10)%10+(i/100)%10+i/1000;
                     if(temp<10000)
                            numbers[temp-1]=1;
              }
              for(int i=0;i<9999;i++){
                     if(numbers[i]==0)
                            System.out.println(i+1);
              }
       }

2、Goldbach's Conjecture

Description

In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard Euler in which he made the following conjecture:

Every even number greater than 4 can be written as the sum of two odd prime numbers.

For example:

8 = 3 + 5. Both 3 and 5 are odd prime numbers.
20 = 3 + 17 = 7 + 13.
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23.

Today it is still unproven whether the conjecture is right. (Oh wait, I have the proof of course, but it is too long to write it on the margin of this page.)

Anyway, your task is now to verify Goldbach's conjecture for all even numbers less than a million.

Input

The input will contain one or more test cases.Each test case consists of one even integer n with 6 <= n < 1000000. Input will be terminated by a value of 0 for n.

Output

For each test case, print one line of the form n = a + b, where a and b are odd primes. Numbers and operators should be separated by exactly one blank like in the sample output below. If there is more than one pair of odd primes adding up to n, choose the pair where the difference b - a is maximized. If there is no such pair, print a line saying "Goldbach's conjecture is wrong."

Sample Input

8
20
42
0

Sample Output

8 = 3 + 5
20 = 3 + 17
42 = 5 + 37

 

翻译:据推测大于4的偶数都可以写成两个质数(素数)的和。让我们编写程序进行验证,如果有写出表达式,如果没有则输出“Goldbach's conjecture is wrong.”。如果能够写成的式子多于1个,则写出两个数字差比较大的那对。例如:

42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23

输出42 = 5 + 37即可。因为37-5最大。

 

题目详解:题目比较简单,只要测试两个数是否为质数即可。下面的代码供参考。

    /*
     * 8 = 3 + 5
     * 20 = 3 + 17
     * 42 = 5 + 37
     */
    public static void test(int x){
       if(6<=x && x < 1000000){
           if(x%2!=0){
              System.out.println("输入数据不是偶数!");
           }else{
              boolean b=false;
              for(int i=3;i+i<x;i++){
                  if(isPrime(i) && isPrime(x-i)){
                     System.out.println(x+" = "+i+" + "+(x-i));
                     b = true;
                     break;
                  }
              }
              if(!b)
                  System.out.println("Goldbach's conjecture is wrong.");
           }
       }else{
           System.out.println("输入数据范围不对");
       }
    }
    
    /*
     * 判断某个数是否为质数,如果是返回true
     */
    public static boolean isPrime(int x){
       for(int i=2;i*i<=x;i++){
           if(x%i==0)
              return false;
       }
       return true;
    }

3、Sum of Consecutive Prime Numbers

Description

Some positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representations does a given positive integer have? For example, the integer 53 has two representations 5 + 7 + 11 + 13 + 17 and 53. The integer 41 has three representations 2+3+5+7+11+13, 11+13+17, and 41. The integer 3 has only one representation, which is 3. The integer 20 has no such representations. Note that summands must be consecutive prime numbers, so neither 7 + 13 nor 3 + 5 + 5 + 7 is a valid representation for the integer 20. Your mission is to write a program that reports the number of representations for the given positive integer.

Input

The input is a sequence of positive integers each in a separate line. The integers are between 2 and 10 000, inclusive. The end of the input is indicated by a zero.

Output

The output should be composed of lines each corresponding to an input line except the last zero. An output line includes the number of representations for the input integer as the sum of one or more consecutive prime numbers. No other characters should be inserted in the output.

Sample Input

2
3
17
41
20
666
12
53
0
Sample Output
1
1
2
3
0
0
1
2

 

翻译:有些整数可以表示为多个连续质数的和,例如53 = 5 + 7 + 11 + 13 + 17,有的数字有多中表示方法,例如41可以表示为2+3+5+7+11+13, 11+13+17, and 41。题目要求计算给定的某个数有多少种表示方法。

 

题目详解:对于给定的某个数,先从2开始,然后找下一个质数,然后累加直到他们的和等于或者大于给定的数,如果等于说明是一组解,如果大于说明不是接,然后找下一个接,直到结束。下面的代码供参考。

    /*
     * Sum of Consecutive Prime Numbers
     */
    public static int test2(int x){
       int count=0;
       for(int i=2;i+i<x;i++){
           int sum = 0;
           if(!isPrime(i)){
              continue;
           }
           for(int j=i;j<x;j++){
              // 判断是否为质数
              if(!isPrime(j))
                  continue;
              sum = sum+j;
              // 判断是否满足条件
              if(sum>=x){
                  if(sum==x){
                     count++;
                  }
                  break;
              }
           }
       }
       if(isPrime(x))
           count++;
       return count;
    }
    
    /*
     * 判断某个数是否为质数,如果是返回true
     */
    public static boolean isPrime(int x){
       for(int i=2;i*i<=x;i++){
           if(x%i==0)
              return false;
       }
       return true;
    }

4、Binomial Coefficients

Description

The binomial coefficient C(n, k) has been extensively studied for its importance in combinatorics. Binomial coefficients can be recursively defined as follows:

C(n, 0) = C(n, n) = 1 for all n > 0;
C(n, k) = C(n
− 1, k − 1) + C(n − 1, k) for all 0 < k < n.

Given n and k, you are to determine the parity of C(n, k).

Input

The input contains multiple test cases. Each test case consists of a pair of integers n and k (0 ≤ k ≤ n < 231, n > 0) on a separate line.

End of file (EOF) indicates the end of input.

Output

For each test case, output one line containing either a “0” or a “1”, which is the remainder of C(n, k) divided by two.

Sample Input

1 1
1 0
2 1

Sample Output

1
1
0

 

翻译:二项式系数(可能翻译的不好)C(n, k)满足下面的要求:

C(n, 0) = C(n, n) = 1 for all n > 0;
C(n, k) = C(n
− 1, k − 1) + C(n − 1, k) for all 0 < k < n.

题目要求根据给定的n和k(0 ≤ k ≤ n < 231, n > 0)计算C(n,k),典型的递归问题。但是如果采用递归,当n的值比较大的时候,会堆栈益处。而上面的表达式应该有相应的公式。如果采用公式计算就会变的简单了。公式自己找吧。

ACM数论专题1——gcd与lcm ACM数论专题1——gcd与lcm前言最大公约数和最小公倍数是什么?如何求得最大公因数和最小公倍数?最小公倍数的求解与证明求解证明最大公因数的证明与求解证明求解相关应用以及扩展公式相关应用太多了先挖坑吧扩展公式 前言 作为一个数学选手没有数学部分的总结是不完美滴~~ 既然有句话叫“数论只会gcd”,那就从gcd开始吧~ 最大公约数和最小公倍数是什么? 最大公因数1 也称最大公约数,指两个或多个整数... 阅读详情

相关推荐

ACM数论专题2——快速幂

ACM数论专题2——快速幂前言为什么要学快速幂快速幂算法核心思想快速幂实现快速幂的时间复杂度 前言 其实我就是想说说废话…刚学C语言两个月的时候我自己把快速幂用非递归的形式写出来了… 当时还不知道什么是快速幂…年轻真好T^T 为什么要学快速幂 我们在求形如aba^{b}ab的值时有很多选择~ 可以枚举,也可以用math里面的pow函数,也可以log换底(啊这个太难了我后面再填坑T^T) 按照朴素算...

qq_37136305的博客 521

java在ACM中的应用

 ACM模拟题讲解(1)-高精度       Java中提供了byte、short、int和long表示整数,float和double来表示浮点数,每种类型都有一定的表示范围,当超过了这个范围之后就不能处理了。为了提供对非常大的整数和浮点数的处理,Java提供了BigDecimal和BigInteger。下面的代码演示了BigDecimal和BigInteger的基本用法:     

自由女神 2148

ACM:数论专题(2)——Eular质数筛法

题目要求:     题目要求给定一个数字n,求在区间[2, n]范围内素数的个数。 解答:     本题还是比较简单的。主要利用了素数最基本的一个性质,即:素数只能被1和其本身整除。因此,如果能为某个数字找到一个除1和它本身以外的因数,那么它一定不是素数。     因此,开设一个大小为n的标记数组is_prime, 开始时其值均为true,然后从2开始扫描,首先2,是一个素数,因此

<code> I am a coder </code> 1012

hdu-1128 自私的数

Self Numbers In 1949 the Indian mathematician D.R. Kaprekar discovered a class of numbers called self-numbers. For any positive integer n, define d(n) to be n plus the sum of the digits of n. (The d

Rainbow__sea的博客 408

ACM算法中数论核心知识详解与实战解析

数论作为ACM算法竞赛中的核心模块之一,是解决整数性质、同余关系与模运算等问题的理论基石。本章系统梳理整除性、最大公约数(GCD)、最小公倍数(LCM)的数学定义及其性质,深入讲解带余除法原理与唯一分解定理——即任一大于1的整数均可唯一表示为有限个素数的乘积。通过形式化定义模算术中的加、减、乘运算规则,建立同余关系的基本框架,为后续章节中快速幂、扩展欧几里得及中国剩余定理的学习奠定基础。同时,引入数论在现代密码学(如RSA)、哈希函数设计和伪随机数生成器中的实际应用,增强理论学习的工程指向性与现实意义。

weixin_42599908的博客 896

2025 高效抓取雪球社区数据:自动化导出Excel与PDF全攻略

本文详细介绍了2025年高效自动化抓取雪球社区数据的完整方案。通过Python脚本,用户可自动抓取帖子列表数据并导出为结构化的Excel表格,同时批量将帖子内容保存为PDF文档,并支持合并与添加书签,极大提升投资研究和信息整理的效率。

weixin_29034963的博客 691

CSUFT 个人赛(2) C题(POJ - 1316) D题(HDU - 2076) G题(HihoCoder - 1740) H题(HDU - 5640)

简单的题目 也没有考虑周全......

OneLine_的博客 564

硬件学习笔记(器件篇)—— 磁珠与磁环

因为有这些差别,所有经常会让人们觉得他们并不是一类器件,但实际上他们的原理是一样的。我们使用磁珠是为了利用损耗消耗高频能量,所以如果我们理解了磁珠是如何消耗高频能量的,我们就能理解磁珠的工作原理。

y_u_yu_yu_的博客 1万+

(ZJU-2005复试)-HDOJ-1180-Self Numbers

 Self Numbers Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1927    Accepted Submission(s): 828  Problem DescriptionIn 1949

轻疯 清风 1215

当KCF遇见卡尔曼滤波:视觉跟随算法的动态优化实战

本文探讨了KCF算法与卡尔曼滤波在视觉跟随算法中的动态优化实践,通过深度融合策略提升目标跟踪的鲁棒性和实时性。特别针对机器人应用场景,详细解析了在Jetson等嵌入式平台上的优化技巧,包括计算图优化、内存访问优化和多线程流水线设计,实现了30FPS@1080p的稳定跟踪性能。

sugar的博客 957

STM32驱动四位共阳极数码管实现高精度秒表计时器

本文详细介绍了如何使用STM32驱动四位共阳极数码管实现高精度秒表计时器。项目基于STM32F103C8T6最小系统板,通过定时器中断和GPIO控制,实现0.1秒精度的计时功能,并解析了共阳极数码管的动态扫描原理及按键消抖等关键技术。

n8m7b6v5c4的博客 951

hoj 1087 Self Numbers

In 1949 the Indian mathematician D.R. Kaprekar discovered a class of numbers called self-numbers. For any positive integer n, define d(n) to be n plus the sum of the digits of n. (The d stands for dig

GadyPu的专栏 510

RK3588在线更新系统内核的方法

《RK3588设备在线升级系统内核方法》 本文介绍了RK3588设备在线升级系统内核的简易方法。通过将新内核文件boot.img拷贝至目标主机后,使用dd命令配合关键参数(fsync确保写入磁盘、notrunc避免截断分区)进行安全更新,更新后需执行sync同步操作并重启生效。文章特别强调操作过程中断电风险,并扩展说明了Uboot的类似更新方法。该方法避免了现场设备拆卸的麻烦,为嵌入式系统维护提供了实用解决方案。

荻夜的博客 1047

【更新完毕】《算法竞赛中的初等数论》(ACM / OI / MO)前言、后记、目录索引(十五万字符的数论书)

《算法竞赛中的初等数论》(信奥 / 数竞 / ACM)由我个人整理的算法竞赛数论合集,近五万字,近十五万字符,算法竞赛,数论相关,这一篇就够了

繁凡さん的博客 3万+

go语言实现服务器server端与客户client端即时通信(附完整源码)

go语言实现服务器server端与客户client端即时通信(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 626

基于Python的电商平台商品价格监控与历史价格查询系统

随着电子商务的快速发展,消费者对商品价格透明度的需求日益增长。本文设计并实现了一个基于Python的电商平台商品价格监控与历史价格查询系统,能够自动抓取京东和淘宝商品信息,存储历史价格数据,并通过可视化界面展示价格走势。系统采用最新的异步爬虫技术、反爬虫绕过策略和现代Web框架,实现了高效稳定的数据采集与展示功能。关键词:Python爬虫、价格监控、历史价格、数据可视化、异步爬虫、电商平台实现了京东和淘宝商品信息的异步爬取,采用多种反爬虫策略提高爬取成功率;

2201_76125261的博客 682

ACM在线模版-f-zyj

试图打造最为完善最为工整的ACM竞赛模版!!!By-f-zyj 在线速查!赛前整理打印,为比赛做足准备-_-#

逐梦者 11万+

基于Python的Booking酒店数据爬虫实战:最新技术与完整代码解析

本文将详细介绍如何使用Python构建一个高效的Booking酒店数据爬虫,涵盖从基础爬取到高级反反爬技术的完整实现。我们将使用最新的Python爬虫技术栈,包括requests-html、Playwright、智能代理轮换等技术,并提供完整的可运行代码示例。文章将深入探讨爬虫的各个组成部分,包括数据提取、存储、反反爬策略以及性能优化等方面。关键词:Python爬虫、Booking数据采集、反反爬技术、Playwright、数据存储。

2201_76125261的博客 936

ACM模块解析之 数论

数  论一.简介数论是ACM中的重点内容。历年竞赛题目,一般都有1~2道题目与数论有密切关系。数论涉及的概念和算法很多,用途也非常广泛。掌握与数论有关的方法,是参赛者需要具备的必要技能。数论的学习应该注意简单的概念要能熟练掌握,可以手写代码。较难理解的概念和知识点应注意模板的整理,模板的整理要注意规范接地气,变量名函数名简单易懂通用,写明模板函数的作用,在比赛中能快速上手使用,最好是本人理解后所写...

popcjz的博客 783

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【数论】ACM数论基础知识总结

文章目录一.质数1.定义2.质数的判断3.质数的筛选4.质因子分解5.互质二.同余1.模运算 数论是数学的一个分支,研究的是整数的性质。本篇文章总结的是数论在ACM中的常见应用。 一.质数 1.定义 质数,又称素数,若一个正整数无法被除了1和它自身以外的其它数整除,则称其为质数,否则为合数。特殊地,1既不是合数也不是质数 2.质数的判断 给定一个数,判断是否为质数的方法: 试除法: 检查所有可能成为n的因子的数,若没有找到因子,则证明这个数是一个质数 一种朴素的做法就是从2遍历到N-1观察有无N的因子,

Qiuker_jl的博客 3268

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ACM中的数论

ACM中的数论是计算机科学领域中的一个重要分支,它主要研究整数的性质、运算规律和它们之间的关系。在ACM竞赛中,数论问题经常出现,因此掌握一定的数论知识对于参加ACM竞赛的选手来说是非常重要的。同余方程:形如x≡a(mod m)的方程,其中x是整数,a和m是已知整数。求解这类方程的方法称为同余方程的解法。离散对数问题:给定一个整数n和一个整数g,求解满足ax^2+by=n的整数解(x,y)的数量。密码学:在密码学中,很多加密算法都涉及到大整数的乘法和取模运算,例如RSA加密算法、椭圆曲线加密算法等。

想要AC的sjh的博客空间 1175

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ACM中数论方面题目集

ACM中数论方面题目集 整除问题: hdu2009 nefu115 nefu116 pku1061 nefu84  素数问题 nefu117 nefu2 hdu2098 nefu109 pku2689 nefu118 nefu119 nefu120  同余问题 pku2769 hdu1021 hdu2035 pku2891 pku2115 hdu1573 hdu3579 pku32

jyNext的专栏 3098
上一篇: ACM模拟题讲解(1)-高精度
下一篇: ACM模拟题详解(2)——简单数论
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值