zoukankan      html  css  js  c++  java
  • POJ 2635 The Embarrassed Cryptographer

    http://poj.org/problem?id=2635

    题意 :给你一个大数,它是两个素数的乘积,再给你一个数L,如果这两个素数中较小的那个比L小,就输出BAD和这个小的素数,反之就输出GOOD 。

    思路 :所谓的高精度取模+同余模定理,表示真的不会。。。看的题解,才知道原来还可以是1000进制,很多人用了10000进制不对,原因是因为余数可能会超范围,而10进制估计会超时吧。

    http://blog.csdn.net/lyy289065406/article/details/6648530

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    using namespace std ;
    const int maxn = 1100000 ;
    char ch[160] ;
    int prime[maxn] ;
    int k[10000] ;
    
    void table()
    {
        int cnt = 0 ;
        prime[cnt++] = 2 ;
        for(int i = 3 ; i < maxn ; i += 2)
        {
            bool flag = true ;
            for(int j = 0 ; prime[j]*prime[j] <= i ; j++)
            {
                if(!(i%prime[j]))
                {
                    flag = false ;
                    break ;
                }
            }
            if(flag)
                prime[cnt++] = i ;
        }
    }
    bool getmod(const int *k,const int p,const int len)
    {
        int gcd = 0 ;
        for(int i = len-1 ; i >= 0 ; i--)
            gcd = (gcd*1000+k[i])%p ;
        if(!gcd)
            return false  ;
        return true ;
    }
    int main()
    {
        table() ;
        int l ;
        while(scanf("%s %d",ch,&l)&&l)
        {
               int len = strlen(ch) ;
               memset(k,0,sizeof(k)) ;
               for(int i = 0 ; i < len ; i++)
               {
                    int m = (len+2-i)/3-1 ;
                    k[m] = k[m]*10+(ch[i]-'0') ;
               }
               int len1 = (len+2)/3 ;
               bool flag = true ;
               for(int i = 0 ; prime[i] < l ; i++)
               {
                   if(!getmod(k,prime[i],len1))
                   {
                       flag = false ;
                       printf("BAD %d
    ",prime[i]) ;
                       break ;
                   }
    
               }
               if(flag)
               printf("GOOD
    ") ;
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    socket套接字
    网络编程
    元类,反射
    元类的多态、内置函数、魔法函数
    接口和抽象类
    面对对象之精髓——封装
    面对对象之继承、组合等
    Ubuntu 与 VM命令
    VM虚拟机修改 [ ubuntu ] sources 源 巴巴云镜像安装 python
    创建进程
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3438281.html
Copyright © 2011-2022 走看看