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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LA4119

發布時間:2024/9/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LA4119 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

?????? 判斷一個關于n的多項式P(n)能否恒被一個正整數D整除。

輸入樣例:

(n^2-n)/2

(2n^3+3n^2+n)/6

(-n^14-11n+1)/3

輸出格式:

?????? 如果滿足條件就輸出“Always an integer”否則輸出“Not always an integer”。

?

分析:

?????? 多項式為P(n)。設k為多項式中最高項的次數。我們只需要驗證P(1)、P(2)、…、P(k+1)是否都被D整除即可。如果是,滿足條件,否則不滿足。

?????? 這是因為:

k=0時,只需要計算P(1)是否被D整除。

k=1時,P(n)=an+b,注意到P(n+1)-P(n)=a。P(n)是等差數列,于是只需要驗證首項與公差是否被D整除,即驗證P(1)、P(2)是否被D整除。

k=2時,P(n)=an^2+bn+c它的一階差分數列是等差數列,如果原數列每一項被D整除,那么dP(n)每一項也被D整除,并且P(1)也被D整除,所以需要驗證P(1)、P(2)、P(3)是否被D整除。

由數學歸納法可得,設k為多項式中最高項的次數,只需要驗證P(1)、P(2)、…、P(k+1)是否都被D整除即可。

1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <algorithm> 7 using namespace std; 8 typedef long long LL; 9 const int N = 500000; 10 char str[N + 1]; 11 int n,d; 12 LL a[N + 1],b[N + 1]; //ai:第i項的指數; bi:第i項的系數 13 LL Calc(LL x){ // 計算P(x)%d 14 LL Ans = 0; 15 for(int i = 1 ; i <= n ; i++){ 16 LL tmp = 1; 17 for(int j = 1 ; j <= a[i] ; j++) tmp = tmp * x % d; 18 Ans = (Ans + tmp * b[i] % d) % d; 19 } 20 return Ans; 21 } 22 int main(){ 23 int Case = 0; 24 while(scanf("%s",str) != EOF){ 25 if(str[0] == '.') break; 26 Case++; printf("Case %d: ",Case); 27 n = 0; 28 int L = strlen(str),i,f; 29 for(i = 1 ; i < L ; i++){ 30 if(str[i] == ')') break; // 之后的部分是數d 31 n++; 32 if(str[i] == '-' || str[i] == '+'){ 33 // 系數為土1的情況 34 if(str[i + 1] == 'n') b[n] = (str[i] == '+') ? 1 : -1; 35 else{ 36 int j = i + 1; b[n] = 0; 37 // 計算該項的系數 38 while('0' <= str[j] && str[j] <= '9') 39 b[n] = b[n] * 10 + str[j] - '0',j++; 40 b[n] = (str[i] == '+') ? b[n] : -b[n]; 41 i = j - 1; 42 } 43 } 44 else // 讀取的是多項式的最高項(第一項) 45 if(str[i] == 'n') b[n] = 1,i--; 46 else{ 47 int j = i; b[n] = 0; 48 while('0' <= str[j] && str[j] <= '9') 49 b[n] = b[n] * 10 + str[j] - '0',j++; 50 i = j - 1; 51 } 52 if(str[i + 1] == 'n'){ 53 if(str[i + 2] == '^'){ 54 int j = i + 3 ; a[n] = 0; 55 // 計算該項的指數 56 while ('0' <= str[j] && str[j] <= '9') 57 a[n] = a[n] * 10 + str[j] - '0',j++; 58 i = j - 1; 59 } 60 else a[n] = 1,i++; 61 } 62 else a[n] = 0; 63 } 64 i += 2; d = 0; 65 for ( ; i < L ; i++) d = d * 10 + str[i] - '0'; 66 int Flag = 1; 67 for (int i = 1 ; i <= a[1] + 1 ; i++) 68 if(Calc(i)) Flag = 0; 69 if (Flag)puts("Always an integer"); 70 else puts("Not always an integer"); 71 } 72 return 0; 73 } View Code

?

轉載于:https://www.cnblogs.com/cyb123456/p/5806706.html

總結

以上是生活随笔為你收集整理的LA4119的全部內容,希望文章能夠幫你解決所遇到的問題。

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