2014年暑假培训 - 数论

2024-09-07 20:32
文章标签 暑假 数论 培训 2014

本文主要是介绍2014年暑假培训 - 数论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A银河上的星星

/**************************************************************
    Problem: 1014
    User: DoubleQ
    Language: C++
    Result: Accepted
    Time:190 ms
    Memory:1688 kb
****************************************************************/
/*两点确定一条直线,以此直线为斜边构造直角三角形,斜边上整数点个数即为

两直角边的最大公约数-1。最后的-1操作这样理解,一条直线上四个点把直线分

成5块,我们所求的最大公约数就是这5块,减1就得到直线上的点数。*/

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
 
int gcd(int a, int b)
{
    return b == 0 ? a : gcd(b , a % b);
}
 
int main()
{//freopen("in.txt","r",stdin);
    int m , n , x , y;
    while(~scanf("%d%d%d%d",&m ,&n, &x ,&y))
    {
        int a = abs(m - x);
        int b = abs(n - y);
        int t;
        if(a < b)
        {
            t = a;
            a = b;
            b = t;
        }
        printf("%d\n",gcd(a, b) - 1);
    }
}

C: 素数判定

/**************************************************************
    Problem: 1054
    User: DoubleQ
    Language: C++
    Result: Accepted
    Time:531 ms
    Memory:1688 kb
****************************************************************/
/*如果n小于等于1的话,直接输出NO;否则应用素数基本判别法,从2到sqrt(n)开始遍历,若发现n % i == 0,
则说明n是合数,否则,n是素数。*/
/*基本素数判别法:如果n是一个合数,那么n一定有一个不超过sqrt(n)的素因子*/

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
//int pri[46000] , npri;
int n;
void solve( int n)
{
     if (n == 0) printf ( "NO\n" );
     else if (n == 1) printf ( "NO\n" );
     else
     {
         int flag = 0;
         for ( int i = 2 ; i * i <= n ;i ++)
         if (n % i == 0)
         {
             flag=1;
             printf ( "NO\n" );
             break ;
         }
         if (!flag)
             printf ( "YES\n" );
     }
}
int main()
{ //freopen("in.txt","r",stdin);
     while (~ scanf ( "%d" ,&n))
     {
         solve(n);
     }
}

D: 因式分解

/**************************************************************
     Problem: 1058
     User: DoubleQ
     Language: C++
     Result: Accepted
     Time:579 ms
     Memory:5600 kb
****************************************************************/
/*分解质因数,对n进行质因数分解,若n为1,则直接输出1;否则用数组a来存n的所有因子。
每次都找到一个最小的质因数i : (1)如果i== num,说明质因数分解过程已结束,直接return;
(2)若num>i,并且num可以整除i,把num用num/i的商重置,重复第一步;(3)若num不
能整除i , 则i++,重复第一步。*/

#include <iostream>
#include <cstdio>
using namespace std;
int a[1000010];
void solve( int num , int &na)
{
     int t = num;
     for ( int i = 2; i <= num; i++)
     {
         while (1)
         { //cout << "hello" << endl;
             if (t == i)
             {
                 a[na++] = i;
                 return ;
             }
             else if (t % i == 0)
             {
                 a[na++] = i;
                 t /= i;
             }
             else
                 break ;
         }
     }
}
int main()
{ //freopen("in.txt","r",stdin);
     int n;
     while (~ scanf ( "%d" ,&n))
     {
         if (n == 1)
         {
             printf ( "1 = 1\n" );
             continue ;
         }
         int na = 0;
         solve(n, na);
         printf ( "%d = " ,n);
         for ( int i = 0 ; i < na - 1; i ++)
             printf ( "%d * " , a[i]);
             printf ( "%d\n" ,a[na-1]);
     }
}

E: Fibonacci Again

/**************************************************************
     Problem: 1059
     User: DoubleQ
     Language: C++
     Result: Accepted
     Time:29 ms
     Memory:5600 kb
****************************************************************/
/*f(n) = (f(n-1) %3 + f(n-2) % 3) %3,直接打表*/

#include <iostream>
#include <cstdio>
using namespace std;
#define N 1000011
int d[N];
void pre_solve()
{
     d[0] = 7 % 3 ,d[1] = 11 % 3;
     for ( int i = 2; i <= 1000000; i++)
         d[i] = (d[i-1]%3 + d[i-2]%3) %3;
}
int main()
{
     pre_solve();
     int n;
     while (~ scanf ( "%d" ,&n))
     {
         if (!d[n])
             printf ( "yes\n" );
         else
             printf ( "no\n" );
     }
}

G: 双六简化版

/**************************************************************
     Problem: 1062
     User: DoubleQ
     Language: C++
     Result: Accepted
     Time:1 ms
     Memory:1692 kb
****************************************************************/
/*扩展欧几里得模板,最后判断有无解,就是得出来的gcd是否的1 */

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
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 = y ;
     y = x - (a / b) * y;
     x = t;
     return r;
}
int main()
{ //freopen("in.txt","r",stdin);
     int a, b , x, y;
     while (~ scanf ( "%d%d" ,&a, &b))
     {
         int k = exgcd(a , b ,x, y);
         if (k != 1)
             printf ( "-1\n" );
         else
         cout << x << " " << y << endl;
     }
}


这篇关于2014年暑假培训 - 数论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146087

相关文章

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

数论ZOJ 2562

题意:给定一个数N,求小于等于N的所有数当中,约数最多的一个数,如果存在多个这样的数,输出其中最大的一个。 分析:反素数定义:对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数。 性质一:一个反素数的质因子必然是从2开始连续的质数。 性质二:p=2^t1*3^t2*5^t3*7

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

POJ2247数论

p = 2^a*3^b*5^c*7^d 求形如上式的第n小的数。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.u

内卷时代无人机培训机构如何做大做强

在当今社会,随着科技的飞速发展,“内卷”一词频繁被提及,反映了各行业竞争日益激烈的现象。对于无人机培训行业而言,如何在这样的时代背景下脱颖而出,实现做大做强的目标,成为每个培训机构必须深思的问题。以下是从八个关键方面提出的策略,旨在帮助无人机培训机构在内卷时代中稳步前行。 1. 精准定位市场需求 深入研究市场:通过市场调研,了解无人机行业的最新趋势、政策导向及未来发展方向。 明确目标

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

CSP-J基础之数学基础 初等数论 一篇搞懂(二)

文章目录 前言算术基本定理简介什么是质数?举个简单例子:重要的结论:算术基本定理公式解释:举例: 算术基本定理的求法如何找出质因数:举个简单的例子: 重要的步骤:C++实现 同余举个例子:同余的性质简介1. 同余的自反性2. 同余的对称性3. 同余的传递性4. 同余的加法性质5. 同余的乘法性质 推论 总结 前言 在计算机科学和数学中,初等数论是一个重要的基础领域,涉及到整数