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

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

    大致题意:

    给定一个大数K,K是两个大素数的乘积的值。

    再给定一个int内的数L

    问这两个大素数中最小的一个是否小于L,如果小于则输出这个素数。

    思路:高精度+素数打表+同余模定理

    View Code
     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 using namespace std;
     6 int sushu[100000];
     7 int num[100];
     8 int pNum;
     9 void init ()
    10 {
    11     pNum=0;
    12     sushu[pNum++]=2;
    13     for(int i=3;i<=1100000;i+=2)  //奇偶法
    14     {
    15         bool flag=true;
    16         for(int j=0;sushu[j]*sushu[j]<=i;j++)  //根号法+递归法
    17             if(!(i%sushu[j]))
    18             {
    19                 flag=false;
    20                 break;
    21             }
    22         if(flag)
    23             sushu[pNum++]=i;
    24     }
    25     return;
    26 }
    27 int main()
    28 {
    29     init();
    30     char str[110];
    31     int k;
    32     while(scanf("%s %d%*c",str,&k)!=EOF)
    33     {
    34         if(str[0]=='0'&&k==0)
    35         break;
    36         int len,i,j;
    37         len=strlen(str);
    38         __int64 s=0;
    39         int t=0;
    40         for(i=0;i<100;i++)
    41         num[i]=0;
    42         for(i=0;i<len%4;i++)
    43         {
    44             s=s*10+str[i]-'0';
    45         }
    46         num[0]=s;
    47         s=0;
    48         j=1;
    49         for(;i<len;i++)
    50         {
    51             s=s*10+str[i]-'0';
    52             t++;
    53             if(t%4==0)
    54             {
    55                 num[j]=s;
    56                 j++;
    57                 s=0;
    58             }
    59         }
    60         if(s!=0)
    61         num[j++]=s;
    62         int flag=0;
    63         for(i=0;i<pNum;i++)
    64         {
    65             if(sushu[i]>k)
    66             break;
    67             s=num[0]%sushu[i];
    68             for(t=1;t<j;t++)
    69             {
    70                 s=(s*10000+num[t])%sushu[i];
    71             }
    72             if(s==0)
    73             {
    74                 flag=1;
    75                 break;
    76             }
    77         }
    78         if(flag==0||(sushu[i]==k&&flag==1))
    79         printf("GOOD\n");
    80         else if(flag==1)
    81         {
    82             printf("BAD ");
    83             printf("%d\n",sushu[i]);
    84         }
    85     }
    86     return 0;
    87 }
  • 相关阅读:
    Java第二次作业
    JAVA学习计划
    学生选课系统
    抽奖
    Java第二次作业
    Java第六次作业修改版
    Java第六次作业
    JAVA第五次作业
    Java第四次作业
    JAVA第三次作业
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2917493.html
Copyright © 2011-2022 走看看