HDU 多校訓練賽第三場之Fansblog

2021-09-25 16:54:54 字數 808 閱讀 8744

這道題主要就是運用了素數的乙個性質吧(應該沒錯了):

prime(n)!% prime(n+1)= 1/(prime(n)+1 )*(prime(n)+2)* ……*(prime(n+1)-1)mod prime(n+1);

剩下的就是如何找給定素數p的前乙個素數q,這裡用了mr素性檢測(很煩,板子抄錯,無限wa+t)。

並且算出來之後貌似還不是答案,總結以上沒有出錯的 然後樣例都不對,很煩。後來發現用 p-上面算的呢個數 正好是答案,就過了。原理可能也是一些定理,咱也不知道,咱也不敢問。

#include #define int long long

using namespace std;

const int s=9;

int qmul(int a, int b, int mod)//快速乘

int qpow(int a,int b,int mod)//快速冪

return ans;

}bool check(int a,int n,int x,int t)

if(ret != 1)

return true;

return false;

}bool miller_rabin(int n)

srand(time(null));

for(int i = 0;i < s; i++)

return true;

}signed main()

printf("%lld\n",(n-qpow(s,n-2,n))%n);

} return 0;

}

JNU第三場訓練賽題解

include includeusing namespace std int a 150 int main for int i 1 i n i printf d a i puts 埃氏700ms,線篩231ms include include includeusing namespace std i...

hdu多校訓練賽第8場 1011

這道題的題意類似於,每個班都會產出n杯奶茶,每個班有m個人,每個人不能喝自己班裡的奶茶且每一次可以喝一杯,問最多所有人能喝掉多少奶茶。我們只需要把所有的奶茶數加起來,模擬人數和奶茶總數 b i 如果前者小於後者,則用ans把人數加起來,如果後者小於前者,則用ans把所有奶茶數加起來。標程如下 inc...

hdu多校第三場

題意是將給出的數相加計算出 其中p 的倍數的最大個數。由題意可得,在任意兩個數相加時,其模值必在0 p 1之間,將兩數相加的模值替換掉之前的兩個數字,得到長度減一的效果,用0和1 標記對應模值是否出現,從而代表被處理過的但還沒有達到 p 的倍數的值,直到某次得到的模值為 0 時,再清空之前的標記 代...