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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

SDUT2165:Crack Mathmen(快速幂)

發布時間:2025/4/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SDUT2165:Crack Mathmen(快速幂) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2165&cid=1431

快速冪。

#include <iostream> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <queue> #include <vector> #include <algorithm> #include <queue> #define inf 0x3f3f3f3f typedef long long ll; using namespace std; int tt,n,cn[110]; int qq[100010],we; struct node {int w,id; }q[110]; #define mod 997 int er(int lf,int rf,int key) {int l=lf,mid;int r=rf;while(l<=r){mid = l+(r-l)/2;if(q[mid].w==key)return mid;else if(q[mid].w>key){r=mid-1;}else{l=mid+1;}}return -1; } int cmp(const void *a,const void *b) {struct node *aa=(struct node *)a;struct node *bb=(struct node *)b;return aa->w-bb->w; } int mult_mod(int a,int b)//計算 (a*b)%c. {a%=mod;// 利用二分思想減少相乘的時間b%=mod;ll ret=0;while(b){if(b&1){ret+=a;ret%=mod;}a<<=1;if(a>=mod) a%=mod;b>>=1;}return ret; } int pow_mod(int x,int n)//x^n%n {if(n==1) return x%mod;x%=mod;int tmp=x;int ret=1;while(n){if(n&1) ret=mult_mod(ret,tmp);tmp=mult_mod(tmp,tmp);n>>=1;}return ret; } void init() {memset(cn,0,sizeof(cn));tt=0;for(int i=48;i<=57;i++){q[tt].id=i;q[tt++].w=pow_mod(i,n);}for(int i=65;i<=90;i++){q[tt].id=i;q[tt++].w=pow_mod(i,n);}for(int i=97;i<=122;i++){q[tt].id=i;q[tt++].w=pow_mod(i,n);}qsort(q,tt,sizeof(q[0]),cmp);cn[0]=1;for(int i=1;i<tt;i++){if(q[i].w==q[i-1].w){cn[i]=2;cn[i-1]=2;}else cn[i]=1;} } char s[1000010]; int main() {int T,da;bool FF;scanf("%d",&T);for(int z=1;z<=T;z++){FF=true;scanf("%d",&n);init();we=0;scanf("%s",s);int l=strlen(s);for(int i=0;i<l;i=i+3){da=s[i]-'0';for(int j=i+1;j<=i+2;j++){da=da*10+(s[j]-'0');}int t=er(0,tt-1,da);if(t==-1||cn[t]>1){printf("No Solution\n");FF=false;break;}else{qq[we++]=q[t].id;}}if(FF){for(int i=0;i<we;i++)printf("%c",qq[i]);printf("\n");}// printf("\n"); }return 0; }

?

總結

以上是生活随笔為你收集整理的SDUT2165:Crack Mathmen(快速幂)的全部內容,希望文章能夠幫你解決所遇到的問題。

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