日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

URAL1204. Idempotents(扩展欧几里得)

發布時間:2023/12/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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\n",min(x1,x2),max(x1,x2)); 63 } 64 return 0; 65 } View Code

?

轉載于:https://www.cnblogs.com/shangyu/p/3409227.html

總結

以上是生活随笔為你收集整理的URAL1204. Idempotents(扩展欧几里得)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。