• URAL1204. Idempotents(扩展欧几里得)


    1204

    大体推推 会出来这个式子 x(x-1) = k*n;n = p*q ;x(x-1)%(p*q)==0;

    因为p,q都为素数 那也就是说x和x-1中必定包含这两个数 而且一个里面只能有一个 不然会大于等于N

    当上面的k=0时 x=0||x=1 这是固定的 

    然后 {x-pi=0; (x-1)-qi = 1}化这一组 就会变成pi-qi=1 这就变成了扩展欧几里得 必定存在一组解 解出来带入一下 注意一下负数就可以了 下一组同样这样计算

    {x-pi=1; (x-1)-qi = 0}

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<cmath>
     7 #include<map>
     8 using namespace std;
     9 #define N 35000
    10 #define LL long long
    11 int p[N],g;
    12 map<int,int>f;
    13 void init()
    14 {
    15     int i,j;
    16     for(i = 2; i <= 32000 ; i++)
    17     if(!f[i])
    18     {
    19         for(j = i+i ; j < N ; j+=i)
    20         f[j] = 1;
    21     }
    22     for(i = 2; i < N ; i++)
    23     if(!f[i])
    24     p[++g] = i;
    25 }
    26 void exgcd(int a,int b,int &x,int &y)
    27 {
    28     if(b==0)
    29     {
    30         x=1;y=0;
    31         return ;
    32     }
    33     exgcd(b,a%b,x,y);
    34     int t = x;
    35     x = y;
    36     y = t-a/b*y;
    37 }
    38 int main()
    39 {
    40     int k,n,x,y,a,b,i;
    41     init();
    42     cin>>k;
    43     while(k--)
    44     {
    45         cin>>n;
    46         int tx = sqrt(n*1.0);
    47         for(i = 1; i <= g ; i++)
    48         {
    49             int o = p[i];
    50             if(n%o==0)
    51             {
    52                 a = o;
    53                 b = n/o;
    54                 break;
    55             }
    56             if(o>tx) break;
    57         }
    58         exgcd(a,b,x,y);
    59         int x1 = x<0? a*x+a*b:a*x;
    60         exgcd(b,a,x,y);
    61         int x2 = x<0? b*x+b*a:b*x;
    62         printf("0 1 %d %d
    ",min(x1,x2),max(x1,x2));
    63     }
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    命名规范
    操作文件和目录
    使用本地shadow socks代理
    发送邮件
    sql参数化
    定义常量
    获取嵌套字典值的方法
    通过字符串调用函数
    用字典优化过长的if 语句
    操作文件和目录
  • 原文地址:https://www.cnblogs.com/shangyu/p/3409227.html
Copyright © 2020-2023  润新知