zoukankan      html  css  js  c++  java
  • 同余定理 专题

    更新中

    题目集

    poj 2769 Reduced ID Numbers http://poj.org/problem?id=2769 这题算是最基本的同余定理的题目吧,以为时间限定比较宽,所以暴力是行的通的。但是也有坑点:不能定义一个1e6大小的bool 型标记数组还用memset清零,这样时间复杂度就达到1e9的级别了。所以清零技巧成了这个题的重中之重

    /**************************************************************
        Problem:poj 2769
        User: youmi
        Language: C++
        Result: Accepted
        Time:1344MS
        Memory:1100K
    ****************************************************************/
    //#pragma comment(linker, "/STACK:1024000000,1024000000")
    //#include<bits/stdc++.h>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <stack>
    #include <set>
    #include <sstream>
    #include <cmath>
    #include <queue>
    #include <deque>
    #include <string>
    #include <vector>
    #define zeros(a) memset(a,0,sizeof(a))
    #define ones(a) memset(a,-1,sizeof(a))
    #define sc(a) scanf("%d",&a)
    #define sc2(a,b) scanf("%d%d",&a,&b)
    #define sc3(a,b,c) scanf("%d%d%d",&a,&b,&c)
    #define scs(a) scanf("%s",a)
    #define sclld(a) scanf("%I64d",&a)
    #define pt(a) printf("%d
    ",a)
    #define ptlld(a) printf("%I64d
    ",a)
    #define rep0(i,n) for(int i=0;i<n;i++)
    #define rep1(i,n) for(int i=1;i<=n;i++)
    #define rep_1(i,n) for(int i=n;i>=1;i--)
    #define rep_0(i,n) for(int i=n-1;i>=0;i--)
    #define Max(a,b) ((a)>(b)?(a):(b))
    #define Min(a,b) ((a)<(b)?(a):(b))
    #define lson (step<<1)
    #define rson (lson+1)
    #define esp 1e-6
    #define oo 0x3fffffff
    #define TEST cout<<"*************************"<<endl
    
    using namespace std;
    typedef long long ll;
    
    int n;
    
    const int maxn=(int)1e5;//为什么1e5就够了还没搞明白,求大神指点啊,直觉应该开到1e6。。。。。
    int flag[maxn];
    int a[400];
    int main()
    {
        //freopen("in.txt","r",stdin);
        int T_T;
        scanf("%d",&T_T);
        for(int kase=1;kase<=T_T;kase++)
        {
            sc(n);
            rep1(i,n)
                sc(a[i]);
            int ans=0,bk;
            while(++ans)
            {
                rep0(i,ans)
                 flag[i]=0;//804K    360MS
                //zeros(flag);//1100K    1344MS  时间复杂度差距实在大的吓人,memset慎用啊
                bk=0;
                rep1(j,n)
                {
                    if(flag[a[j]%ans])
                    {
                        bk=1;
                        break;
                    }
                    flag[a[j]%ans]=1;
                }
                if(bk==0)
                    break;
            }
            pt(ans);
        }
        return 0;
    }

    hdu 2035 人见人爱A^B http://acm.hdu.edu.cn/showproblem.php?pid=2035 这个题是个快速幂的题,当然利用的性质是ab==(a%m)(b%m)(mod m)

    /**************************************************************
        Problem:hdu 2035
        User: youmi
        Language: C++
        Result: Accepted
        Time:0MS
        Memory:1728K
    ****************************************************************/
    //#pragma comment(linker, "/STACK:1024000000,1024000000")
    //#include<bits/stdc++.h>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <stack>
    #include <set>
    #include <ctime>
    #include <sstream>
    #include <cmath>
    #include <queue>
    #include <deque>
    #include <string>
    #include <vector>
    #define zeros(a) memset(a,0,sizeof(a))
    #define ones(a) memset(a,-1,sizeof(a))
    #define sc(a) scanf("%d",&a)
    #define sc2(a,b) scanf("%d%d",&a,&b)
    #define sc3(a,b,c) scanf("%d%d%d",&a,&b,&c)
    #define scs(a) scanf("%s",a)
    #define sclld(a) scanf("%I64d",&a)
    #define pt(a) printf("%d
    ",a)
    #define ptlld(a) printf("%I64d
    ",a)
    #define rep0(i,n) for(int i=0;i<n;i++)
    #define rep1(i,n) for(int i=1;i<=n;i++)
    #define rep_1(i,n) for(int i=n;i>=1;i--)
    #define rep_0(i,n) for(int i=n-1;i>=0;i--)
    #define Max(a,b) ((a)>(b)?(a):(b))
    #define Min(a,b) ((a)<(b)?(a):(b))
    #define lson (step<<1)
    #define rson (lson+1)
    #define esp 1e-6
    #define oo 0x3fffffff
    #define TEST cout<<"*************************"<<endl
    
    using namespace std;
    typedef long long ll;
    int n,m;
    ll mod_mul(ll a,ll b,ll mod)
    {
        ll res=0;
        a%=mod;
        while(b)
        {
            if(b&1)
                res=(res+a)%mod;
            b>>=1;
            a<<=1;
        }
        return res;
    }
    ll mod_exp(ll a,ll b,ll mod)
    {
        ll res=1;
        a%=mod;
        while(b)
        {
            if(b&1)
                res=mod_mul(res,a,mod);
            b>>=1;
            a=mod_mul(a,a,mod);
        }
        return res;
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        while(~sc2(n,m)&&n+m)
        {
            ptlld(mod_exp(n,m,1000));
        }
        return 0;
    }

    hdu 1021 Fibonacci Again http://acm.hdu.edu.cn/showproblem.php?pid=1021 这个题其实可以用性质:

    c=a+b,(c mod m)==((a%m)+(b%m))mod m ;

    但是呢,因为fibonacci数列非常出名,所以性质也有那么一堆:其中一条便是:fn能被3整除,当且仅当n可以被4整除

    于是我们可以观察规律:

    n    7的系数  11的系数

    0  1    0

    1  0    1

    2  1    1

    3  1    2

    4  2    3

    5  3    5

    6  5    8

    7  8    13

    8  13    21

    9  21    34

    10  34    55

    .......................

    可以发现(7+11)%3==0,所以只要两者的系数差3,那么新的fn%3==0。利用fibonacci数列性质(11的系数分布即为fibonacci数列分布),可得

    (n-2)%4==0时,fn%3==0

    /**************************************************************
        Problem:hdu 1021
        User: youmi
        Language: C++
        Result: Accepted
        Time:0MS
        Memory:1728K
    ****************************************************************/
    //#pragma comment(linker, "/STACK:1024000000,1024000000")
    //#include<bits/stdc++.h>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <stack>
    #include <sstream>
    #include <cmath>
    #include <queue>
    #include <string>
    #include <vector>
    #define zeros(a) memset(a,0,sizeof(a))
    #define ones(a) memset(a,-1,sizeof(a))
    #define Max(a,b) (a)>(b)?(a):(b)
    #define Min(a,b) (a)<(b)?(a):(b)
    #define sc(a) scanf("%d",&a)
    #define sc2(a,b) scanf("%d%d",&a,&b)
    #define rep0(i,n) for(int i=0;i<n;i++)
    #define rep1(i,n) for(int i=1;i<=n;i++)
    #define rep_0(i,n) for(int i=n-1;i>=0;i--)
    #define rep_1(i,n) for(int i=n;i>=1;i--)
    #define pt(a) printf("%d
    ",a)
    #define lson (step<<1)
    #define rson (lson+1)
    #define esp 1e-6
    #define oo 0x3fffffff
    #define TEST cout<<"*************************"<<endl
    
    using namespace std;
    typedef long long ll;
    int n;
    
    
    int main()
    {
        //freopen("in.txt","r",stdin);
        while(~sc(n))
        {
            if(n%4==2)
                printf("yes
    ");
            else
                printf("no
    ");
        }
        return 0;
    }
    不为失败找借口,只为成功找方法
  • 相关阅读:
    [ Python入门教程 ] Python文件基本操作
    [转载] 完整诠释软件质量模型
    [ Python入门教程 ] Python 数据结构基本操作
    [ Python入门教程 ] Python字符串数据类型及基本操作
    Notepad++好用的功能和插件
    Python在cmd上打印彩色文字
    你若读书,风雅自来
    [ 转载 ] ssh连接远程主机执行脚本的环境变量问题
    Python基本模块介绍:sys、platform
    深入解析跨站请求伪造漏洞:原理剖析
  • 原文地址:https://www.cnblogs.com/youmi/p/4797504.html
Copyright © 2011-2022 走看看