取模(取餘)運算小結規律——用於數字加密以及破譯
切入點來源於課堂測驗習題。
輸入一個四位數,該數是被加密後的結果。加密方法是:原數每一位數字加9,除以10取餘,再將第一位和第三位,第二位和第四位數字交換,組成加密後的新數字,求出原來的四位數。
輸入:3421
輸出:3245
核心程式碼:
a = num / 1000;//取千位數 b = (num/100) %10;//取百位數 c = (num/10) % 10;//取十位數 d = num % 10;//取個位數 //交換數字 temp=c; c=a; a=temp; temp=d; d=b; b=temp; //求原數各位 a=(a+1)%10; b=(b+1)%10; c=(c+1)%10; d=(d+1)%10;
通過本例拓展研究發現,設通式為(x+m)%n=y
注:由於x-m數字操作範圍較小,在此不做研究
x:原數某一位上數字
m:對某一數字變換
n:取模的除數
y:結果
下面分別就①m<n②m>n討論
①當m<n時,x=[y+(n-m)]%n;
②當m>n時,x=[y-(m-n)]%n;
相關推薦
取模(取餘)運算小結規律——用於數字加密以及破譯
切入點來源於課堂測驗習題。 輸入一個四位數,該數是被加密後的結果。加密方法是:原數每一位數字加9,除以10取餘,再將第一位和第三位,第二位和第四位數字交換,組成加密後的新數字,求出原來的四位數。 輸入:3421 輸出:3245 核心程式碼: a = num / 1000;//取千位數 b =
為什麼要對1000000007取模(取餘)
大數階乘,大數的排列組合等,一般都要求將輸出結果對1000000007取模(取餘)為什麼總是1000000007呢= = 大概≖‿≖✧是因為:(我猜的,不服你打我呀~)1. 1000000007是一個質數(素數),對質數取餘能最大程度避免衝突~2. int32位的最大值為2147483647,所
java%取模(14號)
3ds print .... pan word stat ava args smi java取模運算支持類型:字符型(不包括負數),字節型,短整型,整形,長整型,單精度浮點型,雙精度浮點型 java奇偶判斷 用偶數進行判斷 如果用奇數進行判斷會出現以下問題: public
C語言fmod()函數:對浮點數取模(求余)
AS 臺球 TE 有一個 處理 AC pid sam scrip 頭文件:#include <math.h>fmod() 用來對浮點數進行取模(求余),其原型為: double fmod (double x);設返回值為 ret,那麽 x = n * y
冪取模 (分治法)
int pow_mod(int a,int n,int m ) //a^n % m { if(n == 1) return a % m; int x = pow_mod(a,n/2,m); long long ans = (long lo
除法取模(逆元)
逆元: 若,b*b1 % c == 1 則,b1稱為b模c的乘法逆元。 在ACM中,許多除法取模都要用到求逆元。 但是,逆元,為什麼能給我們帶來 ( a/b ) % c == ( a*b1 ) % c ??? (當然a/b要整除) 要知道,取模等式等價變形中,是沒有除法
取模(mod)與取餘(rem)的區別——Matlab學習筆記
在學習Matlab的數學函式時,教程中提到取模(mod)與取餘(rem)是不同的,今天在網上具體查了一下: 通常取模運算也叫取餘運算,它們返回結果都是餘數.rem和mod唯一的區別在於: 當x和y的正負號一樣的時候,兩個函式結果是等同的;當x和y的符號不同時,re
取模(mod)與取餘(rem)的區別
通常取模運算也叫取餘運算,它們返回結果都是餘數.rem和mod唯一的區別在於: 當x和y的正負號一樣的時候,兩個函式結果是等同的;當x和y的符號不同時,rem函式結果的符號和x的一樣,而mod和y一樣。 這是由於這兩個函式的生成機制不同,rem函式採用fix函式,而mod函式採用了floo
【轉】取模(mod)與取餘(rem)的區別——Matlab學習筆記
對於整數a,b來說,取模運算或者求餘運算的方法要分如下兩步: 1.求整數商:c=a/b 2.計算模或者餘數:r=a-(c*b) 求模運算和求餘運算在第一步不同 取餘運算在計算商值向0方向捨棄小數位 取模運算在計算商值向負無窮方向捨棄小數位 例如:4/(-3)約等於-1.3 在
快速積 快速冪(以及取餘)運算C/C++
#include <bits/stdc++.h> using namespace std; //簡單來說就是把b當成2進位制形式,然後累加; // 2*7=2*(1*2^0+1*2^1+1*2^2)=2*1*2^0+2*1*2^1+2*1*2^2; long l
C語言中的取模(%)運算
C語言中規定,%運算子的兩個運算元必須同為整數型別,這個很好理解,平時用%也是這麼運算的,問題是如果這兩個運算元異號,那麼最後的計算結果該以哪個運算元的符號為準呢?C99標準中規定,若有a,b兩個整型資料作取模運算,則它們必須滿足以下等式的成立: (a / b) * b +
【轉】取模(mod)與取余(rem)的區別——Matlab學習筆記
學習筆記 ear inf ace 方向 由於 返回 rem pos 昨天在學習Matlab的數學函數時,教程中提到取模(mod)與取余(rem)是不同的,今天在網上具體查了一下: 通常取模運算也叫取余運算,它們返回結果都是余數.rem和mod唯一的區別在於:
牛客小白月賽9 A簽到(分數取模,逆元)
傳送門 對分母求一下逆元,把除法取模變成乘法取模,逆元介紹看這裡 這種方法只適合模為質數的情況 1 #include<bits/stdc++.h> 2 using namespace std; 3 const long long mod=1e9+7; 4
組合數取模(逆元+快速冪)
組合大發好 一般我們用楊輝三角性質 楊輝三角上的每一個數字都等於它的左上方和右上方的和(除了邊界) 第n行,第m個就是,就是C(n, m) (從0開始) 電腦上我們就開一個數組儲存,像這樣 #include<cstdio> const int
Codeforces 521C 組合數取模(乘法逆元)
【解題報告】 之前很少遇到組合數取模的問題(做題太少了),所以就GG了……組合數取模這一問題在演算法競賽中還是很常見的,必須紮實掌握。 回到這道題目來,你需要在n個數之間放k個加號,然後求出所有方案的和。 我們知道正向思維,即求出所有的方案,然後對每個
求組合數取模(楊輝三角打表 & 求逆元(擴充套件歐幾里得、費馬小定理、尤拉定理、線性求法) & Lucas)
在acm競賽中,組合數取模的題目還是經常會見到的,所以這是有必要掌握的一個演算法。我本人就因為這個東西而被坑了很多次了= =之前的部落格也都扯過了,就不多說了,下面進入正題。 (1)楊輝三角求組合數 楊輝三角這個東西應該都不陌生,三角的兩邊始終為一,之後向
組合數取模(楊輝三角+Lucas定理+模合數)
/* (1) 1 <= m <= n <= 1000 和 1 <= p <= 10^9 ( p可以是任何數 ) 這個問題比較簡單,組合數的計算可以靠 楊輝
斐波那契數列取模(大數)分治演算法
這是演算法課程上完分之策略後老師留的一道題目: 菲波那契數列如下:1,1,2,3,5,8,13,21,34......其中a[1] = 1, a[2] = 1, a[n]=a[n-1]+a[n-2](n>=3)。對給定的下標n,求解a[n]%1997的值. 其中測試資料n是整數範圍內。 這個題目,主要
【轉】斐波那契數列取模(大數)分治演算法
此中測試資料n是整數侷限內。 這個題目,主如果用到很關鍵的一個數學常識,斐波那契數列的求法,可以轉換為矩陣的連乘,矩陣的n此方演算法又可以用分治的演算法。 並且又有理論根據:(n*m)%c=[ (n%c)*(m%c) ]%c ; (n+m)%c=[ (n%c)+(m%c) ]%c ,所以過程中的成果可以
java 大數取模(有可執行程式碼和詳細註解)
package dashu; //這是我的包名字,這個可以按規則任意起 import java.util.*; import java.math.*; public class muban{ /