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 }
  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2917493.html
Copyright © 2011-2022 走看看