被綠的小華
題目大意就是給出乙個01串表示的二進位制數是否為3的倍數。
方法1:暴力
直接用快速冪暴力求解,求解的過程中同時模3。
1 #include2 #include3 #include暴力方法2:數學二進位制數的奇數字1的個數與偶數字1的個數的差能被3整除,則這個數是3的倍數。4 #include5 #include6 #include7
#define maxn 10000
8#define int long long
9#define mod 3
10using
namespace
std;
11int n,m,ans=0;12
inta[maxn];
13 inline int pow_(int x,int
n)21
return cnt%mod;22}
23signed main()
2432}33
if(ans==0) cout<
<
34else cout<
<
35return0;
36 }
1 #include2 #include3 #include4 #include數學證明:對於二進位制數的偶數字:2^0%3=1;5 #include6 #include
7 #include8 #include9 #include10 #include11 #include12 #include13
#define sc scanf
14#define pr printf
15#define maxn 10001
16#define inf 9999999999
17#define endd puts("");
18#define int long long
19#define il inline
20#define pi 3.1415926535898
21#define inf_min -214783647
22using
namespace
std;
23 il int
read()
27while (ch>='
0'&&ch<='
9')
28return s *f;29}
30/*
*****************************head****************************************
*/31
int pow_(int a,int
n)39
return
cnt;40}
41signed main()
4251}52
if(abs(num1-num2)%3==0) cout<
;53else cout<
;54return0;
55 }
2^2=2^0*4;
2^2%3=(2^0%3)*(4%3)=(2^0%3)*1=2^0%3=1;
則2^2%3==2^0%3;
2^4%3=(2^2%3)*(4%3)=(2^2%3)*1=2^2%3=2^0%3=1;
則2^4%3==2^2%3==2^0%3;
以此類推
(2^2n)%3=2^(2(n-1))%3*(4%3)=2^(2(n-1))%3*1=2^(2(n-2))%3*(4%3)……=2^(2(n-n))%3*4%3=2^0*(4%3)=2^0*1=1*1;
得(2^2n)%3=2^0*1=1;
而二進位制數的奇數字同理可證得(2^(2n+1))%3=2^1%3=2;
從而得出乙個二進位制數的奇數字%3為2,二進位制數的偶數字%3為1;
奇數字1的個數與偶數字1的個數的差有兩種情況:
(1)奇數字1的個數與偶數字1的個數相等;
若乙個二進位制數有n個奇數字的1,m個偶數字的1,且n=m,由上面證得的結論可知二進位制數的奇數字%3為2,偶數字%3為1;
則這個二進位制數%3的值為n(1+2)%3=3n%3=0,這個二進位制數能被3整除;
(2)奇數字1的個數與偶數字1的個數不等;
若乙個二進位制數有n個奇數字的1,m個偶數字的1,且n>m,由上面證得的結論可知二進位制數的奇數字%3為2,偶數字%3為1;
則這個二進位制數%3的值為m(1+2)%3+(n-m)*2%3,若n-m%3==0,則(n-m)*2%3==0,可得結論若奇數字的1大於偶數字的1的個數且個數差為3的倍數,則該二進位制數是3的倍數;
若乙個二進位制數有n個奇數字的1,m個偶數字的1,且n
則這個二進位制數%3的值為n(1+2)%3+(n-m)*1%3,若n-m%3==0,則(n-m)*1%3==0,可得結論若奇數字的1小於偶數字的1的個數且個數差為3的倍數,則該二進位制數是3的倍數;
綜上所述可證得:二進位制數的奇數字1的個數與偶數字1的個數的差能被3整除,則這個數是3的倍數。
LeetCode第283題解法與思考
第283題的要求如下 給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。題目的難點在於,不能使用額外的記憶體空間,必須在原陣列上操...
C語言程式設計 陣列 習題解答(持續更新)
最近在複習c語言,把部分習題寫一下。每道題由乙個函式完成,僅需在main函式中呼叫即可 有空再把注釋和解題思路寫一下 基本和書上的思路一致 print all prime number between 1 to n void prime eratosthenes int n num 1 0 1 is...
關於快取設計思考與實踐 持續更新中
減少資料庫壓力 提公升訪問速度 1.時間依賴 2.檔案依賴 3.資料庫依賴 4.操作依賴 自已定義的 1 key的管理,如何保證唯一,並最新 參考解決 gethash 2 增刪改查操作如何保證獲取的資料為最新資料 3 分頁列表的快取如何處理 4 防止雪崩即失效時間一致,而導致的資料量讀寫 參考解決 ...