MT2007-快速判断一个数能否被整除
生活随笔
收集整理的這篇文章主要介紹了
MT2007-快速判断一个数能否被整除
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
快速判斷一個整數能否被另一個整數整除
[info]
可能大家在小數初中的時候都知道一些快速判斷一個數能被特殊的數整除的方法,如:
如果一個數的所有數字之和能被3整除,則這個數能被3整除;
如果一個數的個位為0或5,則這個數能被5整除;
如果一個數的個位數加10位數的2倍加上百位數的4倍能被8整除,則這個數能被8整除
如果一個數的所有數字之和能被9整除,則這個數能被9整除;
如果一個數所有奇數位的數字相加減去所有偶數位的數字后的值能被11整除,那么這個數能被11整除;
但是如何快速判斷一個數能被7整除呢?本文進行了被整除的理論深入分析。
設x和m是一個自然數: x=xn …. x3 x2 x1 x1為x的個位, x2為x的十位, x3為x的百位, xn為x的N位 如x=2368,則x1=8,x2=6,x3=3,x4=2 則有如下公式: x%m=( x1 +101%m*x2+102%m*x3+……+10n-1%m*xn)%m 其中%表示求余數的符號 公式證明 依據余數的兩個定理 (m+n)%k=(m%k+n%k)%k(結合率) (m*n)%k=((m%k)*n)%k (交換率) 則 x%m = (x1 + x2*10 + x3*102 +xn*10n-1)%m = (x1%m+ x2*10%m+ x3*102%m +xn*10n-1%m)%m = (x1%m+ (10%m*x2)%m + (102%m*x3)%m +(10n-1%m*xn)%m)%m = (x1 + 10%m*x2+ 102%m*x3 +10n-1%m*xn)%m 所以公式得證 舉例: 如果一個數的所有數字之和能被3整除,則這個數能被3整除 10%3=1,100%3=1,1000%3=1.....10n%3=1 x%3=(x1 + x2+ x3 +......+xn)%3 如果一個數的個位數能被5整除,則這個數能被5整除,也就是說個位為0或5的數都能被 5整除10%5=0,100%5=0,1000%5=0.....10n%5=0 x%5=x1%5 對于7這個數比較麻煩,用語言不好直接描述了,大家看公式就知道了 10 %7=3,102%7=2,103%7=6,104%7=4,105%7=5,106%7=1, 107%7=3,108%7=2..... x%7=(x1 + 3x2+ 2x3+ 6x4+ 4x5+ 5x6+ x7+......)%7 也可寫為 x%7= (x1 + 3x2+ 2x3 - x4 - 3x5 - 2x6+ x7+......)%7 例: 567%7=(7+3*6+2*5)%7=(7+18+10)%7=35%7=0 所以567%7=0題目位置
[碼題集](碼蹄集 (matiji.net))
思想迸發
首先就是判斷每一個數的 各個位數之和 % 3 == 0 話 cnt++ 否則將 !=0 放入數組index 將index[i] + index[i+1] %3 ?= 0 √ cnt++ 同時將index[i] = index[i+1] = -1 最后cnt /= 2 因為兩個數字為一組啊啊啊AC code
#include<bits/stdc++.h>using namespace std; typedef long long ll; #define quicken ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); #define MAX_NUM 10005 #define MOD 100000007 #define PI 3.1415926double res; ll ans, n, m, t, k,len, cnt = 0, minn = MAX_NUM,maxx = 0; char ch, s1[MAX_NUM] = "", s2[MAX_NUM] = ""; bool flag = false;ll get_sum(ll t) {ll temp = 0;while (t) {temp += t % 10;t /= 10;}return temp; }int main() {quicken;ll index_num = 0;cin >> n;vector<ll> index;for(int i = 1; i <= n; i++) {cin >> index_num;if(get_sum(index_num) % 3 == 0) {cnt++;} else {// push_back就是將值放入vector的最后一位,其實是每次放入都進行一次malloc重新分配內存index.push_back(get_sum(index_num));}}for(int i = 0; i < index.size(); i++) {if(index[i] == -1) continue;for(int j = i+1; j < index.size(); j++) {if(index[j] == -1) continue;if((index[i] + index[j]) % 3 == 0) {cnt += 2;index[i] = -1;index[j] = -1;break;}}}cnt /= 2;cout << cnt << endl;return 0; } //3 //123 123 99下面是一些無聊的東西哈哈哈!!!.
淺紅色文字:淺紅色文字:
深紅色文字:深紅色文字
淺綠色文字:淺綠色文字
深綠色文字:深綠色文字
淺藍色文字:淺藍色文字
深藍色文字:深藍色文字
淺黃色文字:淺黃色文字
深黃色文字:深黃色文字
淺青色文字:淺青色文字
深青色文字:深青色文字
淺紫色文字:淺紫色文字
深紫色文字:深紫色文字
總結
以上是生活随笔為你收集整理的MT2007-快速判断一个数能否被整除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AndroidStudio无线传输文件到
- 下一篇: C4D 导obj_初学C4D,一定要注意