質素的演算法
『壹』 判斷整數是否分解成兩個質素的高效演算法
這個問題,首先用小質數測試。 通過之後:
然後,嘗試用Pollard-Rho演算法進行分解因子。當然你必須准備一個好的 素數測試演算法。素數測試演算法,可用Miller-Rabin對付~
『貳』 請教各位高人,用C++讀取某txt文件內的數值作為范圍並求此范圍內的質素怎麼實現
#include <fstream>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
using namespace std;
long nextprime( long lastprime, const char* filename);
int main()
{
const char* filename = "D:\\JunkData\\primes.txt";
int nprimes = 0;
int count = 0;
long lastprime = 0;
int tries = 0;
cout<<"How many primes would you like (at 1east 3)? : ";
do
{
if(tries) //if(tries==0) 為falst,不執行;
cout<<endl<<"You must request at 1east 3, try again: ";
cin>> nprimes;
if ( ++tries == 5)
{
cout<<endl<<"I give up!" <<endl;
return 1;
}
} while ( nprimes < 3);
ifstream inFile; //create input file stream object;
inFile.open(filename); //open the file as input stream;
cout<<endl;
if ( !inFile.fail()) //如果打開文件成功;
{
do
{
inFile >> lastprime;
cout<<(count++ % 5 == 0 ? "\n" : " " )<< setw(10)<<lastprime;
} while (count < nprimes && !inFile.eof());
inFile.close(); //關閉文件;
}
inFile.clear(); //清除文件;
try
{
ofstream outFile;
if ( count == 0)
{
outFile.open(filename);
if ( !outFile.is_open()) //如果不能打開文件
throw ios::failure( string("Error opening output file") +
string(filename) + string(" in main()"));
outFile <<" 2 3 5";
outFile.close();
cout<<setw(10)<< 2 <<setw(10)<< 3 <<setw(10)<< 5;
lastprime = 5;
count = 3;
}
while(count < nprimes)
{
lastprime = nextprime(lastprime, filename);
outFile.open(filename, ios::out | ios::app);
if ( !outFile.is_open())
throw ios::failure( string("Error opening output file") +
string(filename) + string(" in main()"));
outFile<<" "<<lastprime;
outFile.close();
cout<< (count++ % 5 == 0 ? "\n" : " ") << setw(10) <<lastprime;
}
cout<<endl;
return 0;
}
catch (exception& ex)
{
cout<<endl<<typeid(ex).name()<<": "<<ex.what();
return 1;
}
}
long nextprime( long lastprime, const char* filename)
{
bool isprime = false;
long aprime = 0;
ifstream inFile;
for ( ; ; )
{
lastprime += 2;
long limit = static_cast<long>(sqrt(static_cast<double>(lastprime)));
inFile.open(filename);
if ( !inFile.is_open())
throw ios::failure( string("Error opening input file") +
string(filename) + string(" in nextprime()"));
do
{
inFile >> aprime;
} while (aprime <= limit && !inFile.eof() &&
(isprime = lastprime % aprime > 0));
inFile.close();
if (isprime)
return lastprime;
}
}
這個是讀取D:\JunkData\primes.txt的文件里的質數,比如你輸入10個,他就會從文件里讀取10個;
以下是把質數寫如文件文本的代碼
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
const int max = 100;
long primes[max] = {2, 3, 5};
int count = 3;
long trial =5;
bool isprime = true;
do
{
trial += 2;
int i =0;
do
{
isprime = trial % *(primes +i) > 0;
} while (++i < count && isprime);
if (isprime)
*(primes + count++) = trial;
} while (count < max);
ofstream outFile("D:\\JunkData\\primes.txt");
for (int i = 0; i < max; i++)
{
if(i % 5 ==0)
outFile<<endl;
outFile << setw(10) << *(primes +i);
}
return 0;
}
『叄』 高一生物,怎麼理解蛋白質中至少含有的N和O原子數的演算法,謝謝
氨基酸通式:中心碳原子外連4個集團,分別是-NH2(氨基),-COOH(羧基),-H(氫原子),-R(側鏈基團)
大量氨基酸通過脫水縮合變成蛋白質,這個過程中,氨基酸的一個氨基中的一個H,和下一個氨基酸的羧基中的-OH(羥基)(高二化學能學到),結合變成水,剩下的部分為肽鍵,將兩個氨基酸連接起來。
如果不管-R,那麼有X個氨基酸連接成鏈狀蛋白質(環狀很少見),那麼肽鍵數就是X-1個了唄
也就是說,每有一個肽鍵,就少了一個-OH和一個-H,也可以看成是少一個水H2O
最後在一個蛋白質的端位氨基酸,會分別留有一個氨基和一個羧基
到這里,所有的題目你都可以解決了。給你氨基酸的個數,無論給不給你R基有什麼,你都可以計算出蛋白質中的N、R、H、C、肽鍵、氨基、羧基個數
比如:有100個氨基酸連成1個鏈狀蛋白質,問至少含有多少個N和多少個O。想法:1個氨基酸通式中只有1個N,這個N形成肽鍵時沒有消去,所以至少就有100個N!1個氨基酸通式有2個O,形成了肽鍵就少1個O,100個氨基酸有99個肽鍵,那一個肽鍵中就只有1個O,最尾巴的羧基還剩有2個O,所以至少有101個O。如果形成的是2個鏈狀蛋白質,你可以看成是有50個氨基酸形成1個蛋白質再乘以二倍。以此類推,H、C等均能計算
因為你問的是如何理解,所以我把解題思路告訴你了。最後的各種結論公式,老師和輔導書上都有,不需要記,只要記住怎麼想就行。
『肆』 尋找好演算法
int main()
{
int n1,nm,i,j,flag,count=0;
do{
printf("Input START and END=?");
scanf("%d%d",&n1,&nm); /*輸入求素數的范圍*/
}while(!(n1>0&&n1<nm)); /*輸入正確的范圍*/
printf("...........PRIME TABLE(%d--%d)............\n",n1,nm);
if(n1==1||n1==2) /*處理素數2*/
{
printf("%4d",2);
n1=3;count++;
}
for(i=n1;i<=nm;i++) /*判定指定范圍內的整數是否為素數*/
{
if(!(i%2))continue;
for(flag=1,j=3;flag&&j<i/2;j+=2)
/*判定能否被從3到整數的一半中的某一數所整除*/
if(!(i%j))flag=0; /*若能整除則不是素數*/
if(flag) printf(++count%15?"%4d":"%4d\n",i);
}
}
『伍』 什麼叫質素
質素(又稱為素數或質數)
1.就是在所有比1大的整數中,除了1和它本身以外,不再有別的因數,這種整數叫做質數.還可以說成質數只有1和它本身兩個約數.2.素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任 何其它兩個整數的乘積.例如,15=3*5,所以15不是素數;
又如,12 =6*2=4*3,所以12也不是素數.另一方面,13除了等於13*1以 外,不能表示為其它任何兩個整數的乘積,所以13是一個素數.
質數的概念
一個數,如果只有1和它本身兩個因數,這樣的數叫做質數(或素數).例如 2,3,5,7 是質數,而 4,6,8,9 則不是,後者稱為合成數或合數.從這個觀點可將整數分為兩種,一種叫質數,一種叫合成數.(1不是質數,也不是合數)著名的高斯「唯一分解定理」說,任何一個整數.可以寫成一串質數相乘的積.質數中除2是偶數外,其他都是奇數.
質數的奧秘
質數的分布是沒有規律的,往往讓人莫名其妙.如:101、401、601、701都是質數,但上下面的301(7*43)和901(17*53)卻是合數.
有人做過這樣的驗算:1^2+1+41=43,2^2+2+41=47,3^2+3+41=53……於是就可以有這樣一個公式:設一正數為n,則n^2+n+41的值一定是一個質數.這個式子一直到n=39時,都是成立的.但n=40時,其式子就不成立了,因為40^2+40+41=1681=41*41.
說起質數就少不了哥德巴赫猜想,和著名的「1+1」
哥德巴赫猜想 :(Goldbach Conjecture)
內容為「所有的不小於6的偶數,都可以表示為兩個素數」
這個問題是德國數學家哥德巴赫(C.Goldbach,1690-1764)於1742年6月7日在給大數學家歐拉的信中提出的,所以被稱作哥德巴赫猜想.同年6月30日,歐拉在回信中認為這個猜想可能是真的,但他無法證明.從此,這道數學難題引起了幾乎所有數學家的注意.哥德巴赫猜想由此成為數學皇冠上一顆可望不可及的「明珠」.「用當代語言來敘述,哥德巴赫猜想有兩個內容,第一部分叫做奇數的猜想,第二部分叫做偶數的猜想.奇數的猜想指出,任何一個大於等於7的奇數都是三個素數的和.偶數的猜想是說,大於等於4的偶數一定是兩個素數的和.」(引自《哥德巴赫猜想與潘承洞》)
哥德巴赫猜想貌似簡單,要證明它卻著實不易,成為數學中一個著名的難題.18、19世紀,所有的數論專家對這個猜想的證明都沒有作出實質性的推進,直到20世紀才有所突破.直接證明哥德巴赫猜想不行,人們採取了「迂迴戰術」,就是先考慮把偶數表為兩數之和,而每一個數又是若干素數之積.如果把命題"每一個大偶數可以表示成為一個素因子個數不超過a個的數與另一個素因子不超過b個的數之和"記作"a+b",那麼哥氏猜想就是要證明"1+1"成立.
1900年,20世紀最偉大的數學家希爾伯特,在國際數學會議上把「哥德巴赫猜想」列為23個數學難題之一.此後,20世紀的數學家們在世界范圍內「聯手」進攻「哥德巴赫猜想」堡壘,終於取得了輝煌的成果.
到了20世紀20年代,有人開始向它靠近.1920年,挪威數學家布爵用一種古老的篩選法證明,得出了一個結論:每一個比6大的偶數都可以表示為(9+9).這種縮小包圍圈的辦法很管用,科學家們於是從(9十9)開始,逐步減少每個數里所含質數因子的個數,直到最後使每個數里都是一個質數為止,這樣就證明了「哥德巴赫猜想」.
1920年,挪威的布朗(Brun)證明了 「9+9 」.
1924年,德國的拉特馬赫(Rademacher)證明了「7+7 」.
1932年,英國的埃斯特曼(Estermann)證明了 「6+6 」.
1937年,義大利的蕾西(Ricei)先後證明了「5+7 」, 「4+9 」, 「3+15 」和「2+366 」.
1938年,蘇聯的布赫 夕太勃(Byxwrao)證明了「5+5 」.
1940年,蘇聯的布赫 夕太勃(Byxwrao)證明了 「4+4 」.
1948年,匈牙利的瑞尼(Renyi)證明了「1+c 」,其中c是一很大的自然數.
1956年,中國的王元證明了 「3+4 」.
1957年,中國的王元先後證明了 「3+3 」和 「2+3 」.
1962年,中國的潘承洞和蘇聯的巴爾巴恩(BapoaH)證明了 「1+5 」, 中國的王元證明了「1+4 」.
1965年,蘇聯的布赫 夕太勃(Byxwrao)和小維諾格拉多夫(BHHopappB),及 義大利的朋比利(Bombieri)證明了「1+3 」.
1966年,中國的陳景潤證明了 「1+2 」[用通俗的話說,就是大偶數=素數+素數*素數或大偶數=素數+素數(註:組成大偶數的素數不可能是偶素數,只能是奇素數.因為在素數中只有一個偶素數,那就是2.)].
其中「s + t 」問題是指: s個質數的乘積 與t個質數的乘積之和
20世紀的數學家們研究哥德巴赫猜想所採用的主要方法,是篩法、圓法、密率法和三角和法等等高深的數學方法.解決這個猜想的思路,就像「縮小包圍圈」一樣,逐步逼近最後的結果.
由於陳景潤的貢獻,人類距離哥德巴赫猜想的最後結果「1+1」僅有一步之遙了.但為了實現這最後的一步,也許還要歷經一個漫長的探索過程.有許多數學家認為,要想證明「1+1」,必須通過創造新的數學方法,以往的路很可能都是走不通的.
質數的性質
被稱為「17世紀最偉大的法國數學家」費爾馬,也研究過質數的性質.他發現,設Fn=2^(2^n)+1,則當n分別等於0、1、2、3、4時,Fn分別給出3、5、17、257、65537,都是質數,由於F5太大(F5=4294967297),他沒有再往下檢測就直接猜測:對於一切自然數,Fn都是質數.但是,就是在F5上出了問題!費爾馬死後67年,25歲的瑞士數學家歐拉證明:F5=4294967297=641*6700417,並非質數,而是合數.
更加有趣的是,以後的Fn值,數學家再也沒有找到哪個Fn值是質數,全部都是合數.目前由於平方開得較大,因而能夠證明的也很少.現在數學家們取得Fn的最大值為:n=1495.這可是個超級天文數字,其位數多達10^10584位,當然它盡管非常之大,但也不是個質數.質數和費爾馬開了個大玩笑!
還有一種被稱為「殆素數」的,意思是很像素數,著名數學家陳景潤就使用了這個概念,他的「1+2」的「2」,就表示「殆素數」,實際上是一個合數.大家不要搞混了.嚴格地講,「殆素數」不是一個科學概念,因為科學概念的特徵是(1)精確性;(2)穩定性;(3)可以檢驗;(4)系統性;(5)專義性.例如,許多數學家使用了「充分大」,這也是一個模糊概念,因為陳景潤把它定義為「10的50萬次方」,即在10的後面加上50萬個「0」.這是一個無法檢驗的數.
質數的假設
17世紀還有位法國數學家叫梅森,他曾經做過一個猜想:2^p-1代數式,當p是質數時,2^p-1是質數.他驗算出了:當p=2、3、5、7、11、13、17、19時,所得代數式的值都是質數,後來,歐拉證明p=31時,2^p-1是質數. p=2,3,5,7時,Mp都是素數,但M11=2047=23×89不是素數.
還剩下p=67、127、257三個梅森數,由於太大,長期沒有人去驗證.梅森去世250年後,美國數學家科勒證明,2^67-1=193707721*761838257287,是一個合數.這是第九個梅森數.20世紀,人們先後證明:第10個梅森數是質數,第11個梅森數是合數.質數排列得這樣雜亂無章,也給人們尋找質數規律造成了困難.
質數表上的質數
現在,數學家找到的最大的梅森數是一個有9808357位的數:2^32582657-1.數學雖然可以找到很大的質數,但質數的規律還是無法循通.
【求大質數的方法】
研究發現質數除2以外都是奇數,而奇數除了【奇數*奇數】(或再加「*奇數」)都是質數.那麼用計算機先把【奇數*奇數】(或再加「*奇數」)(比如9,15,21,25,27,33,35,39……)都求出來,再找奇數中上面沒提到的那些數,那些數就是素數.
人們找出的幾個超大質數中有遺漏,那麼就可以用此方法求出那些遺漏的數,不過需要很長時間!
這對於「孿生素數」有幫助喔!
上面這個演算法比較麻煩,對於求很大的素數效率低下,這個很大的素數可以用概率演算法求.
求素數,請用《公理與素數計算》.這種方法用不著將所有奇數都寫出來,而且計算出來的素數可以做到一個不漏.對於合數的刪除,也不是涉及所有奇合數,刪除是准確無誤的,刪除奇合數後剩餘的全部是素數.如:對奇素數3的倍數的數進行刪除,在整個自然數中只須刪除一個數;對素數5的倍數的數進行刪除,在整個自然數中只須刪除2個數;對素數7的倍數的數進行刪除,在整個自然數中只須刪除8個數;以此類推,如果哪位老師能夠將它用電腦編成程序,對計算素數有很大的幫助.
上面這個演算法比較麻煩,對於求很大的素數效率低下,這個很大的素數可以用概率演算法求.
求素數,請用《公理與素數計算》.這種方法用不著將所有奇數都寫出來,而且計算出來的素數可以做到一個不漏.對於合數的刪除,也不是涉及所有奇合數,刪除是准確無誤的,刪除奇合數後剩餘的全部是素數.如:對奇素數3的倍數的數進行刪除,在整個自然數中只須刪除一個數;對素數5的倍數的數進行刪除,在整個自然數中只須刪除2個數;對素數7的倍數的數進行刪除,在整個自然數中只須刪除8個數;以此類推,如果哪位老師能夠將它用電腦編成程序,對計算素數有很大的幫助.」
【質數的個數】
有近似公式: x 以內質數個數約等於 x / ln(x)
ln是自然對數的意思.
尚准確的質數公式未給出.
10 以內共 4 個質數.
100 以內共 25 個質數.
1000 以內共 168 個質數.
10000 以內共 1229 個質數.
100000 以內共 9592 個質數.
1000000 以內共 78498 個質數.
10000000 以內共 664579 個質數.
100000000 以內共 5761455 個質數.
總數無限
希望對你有幫助
『陸』 蛋白質的結構的測定方法都有什麼
蛋白質三級結構測定主要有X射線衍射法、核磁共振技術、三維電鏡重構技術三種方法。
X線晶體衍射是最經典的測定生物大分子結構的方法。蛋白質晶體衍射中最大的難點就在於蛋白質的結晶,也在一定程度上限制了它的發展。NMR技術後起之秀,相對於X-RAY較為簡單,近年來技術越發成熟,可測定蛋白質的分子量也在攀升,而且其解析度也很高,
三維電鏡重構技術也是結構生物學研究中的一種較新的技術。技術難點在於演算法。
『柒』 計算飼料配方的方法有哪些如何計算
簡單計算配方的方法有方形法、代數法、試差法,下面分別說明其計算方法。
(1)方形法也叫對角線法、交叉法。可分為單方形法、多方形法。
只能考慮2類飼料、1種營養指標的情況下,可採用此法。
例:用玉米、豆餅為60~90千克豬配製滿足蛋白質需要的混合飼料。
第一步:從飼養標准和飼料成分表中查出,60~90千克豬的蛋白質需要量為15%,玉米和豆餅的蛋白質含量為8.6%和42%。畫一方框,將玉米和豆餅的蛋白質含量分別寫於方框左上角和左下角,將混合飼料蛋白質需要量(15%)寫於方框兩對角線交叉處,如下示:
表23 最後配方比例及營養成分飼料成分 比例(%)每千克養分含量玉米 67.42 消化能13.10(兆焦)麥麩 10 粗蛋白16.0(%)豆餅 11 鈣0.6(%)花生餅 5 磷0.5(%)魚粉 4 賴氨酸0.9(%)食鹽 0.3磷酸氫鈣 0.13碳酸鈣 0.93添加劑 1賴氨酸 0.22合計 100.00第九步:整理出配方,標明適用對象,列出飼料種類及比例,重要養分含量。
最後,需要說明的是這里只是介紹一種計算方法,有些值不是按標准列的,如賴氨酸需要量。另外,這里沒有考慮干物質含量,粗纖維的含量一般來說,體重25~60千克的豬應在4%以下,體重60~90千克為4.5%,母豬6%~7%以下。初配完以後,可以計算一下,如果超出這個比例,應降低含粗纖維高的原料用量。
1%的添加劑主要包括維生素、氨基酸、微量元素、抗生素等,這里把賴氨酸又單拿出來,也是為了說明演算法。
此外,現在還有用計算器、計算機來計算飼料配方的,這些軟體的使用都不復雜,而且計算速度很快,目前較廣泛應用的是線性規劃法。不僅能快速計算出最佳的飼料配方,而且可以根據原料價格,隨時調整配方,使之成本最低。
『捌』 (蛋白質質譜數據處理有哪些演算法
現在的質譜公司都為自己的儀器配有全套的分析軟體,我們這用的是Agilent B0200版的。但這台機器是48G內存,兩個8核CPU,不知道你那電腦能不能運行這樣的軟體。建議你去實驗室找一台質譜,在他的伺服器上做分析。(數據文件要刻在光碟上帶過去)
『玖』 什麼叫「質素」素質和質素是不同的概念嗎
如果不涉及到專業領域,質素和素質沒有什麼區別,就是有的人為了顯示自己有學問與眾不同專門挑這種難以理解的詞語哄人,實際上他們沒有水平啦。真正的好文章是要普通人都能看得懂得文章,就像唐朝的杜甫,他寫完詩後都要拿著自己的作品給普通大眾看,如果他們看懂了,才過關。你再看看我們文學大師們的文章,當今社會沒有大師,剛剛去世了一個,巴老的,家春秋三部曲,那叫個語言平實無華,人人能看懂,感動了多少人呀。這才是好文章。
我覺得你要是看到有人用這些華而不實的詞語,那他們一定是虛榮心很強的人,在他們的文章中都要顯擺自己,實際上是驢糞蛋---表面光,裡面都是草包。
如果涉及到專業領域,質素就有了特別的含義,是指物品的材質和質量。素質一般是形容人的綜合能力,不會用來形容物。
『拾』 每天攝入的蛋白質如何計算
兩種演算法,一種是你知道你的總攝入熱量,比如你要吃2000,那就乘以百分之20除以4,還有一種演算法是體重乘以1.5。
如果是要知道自己每天吃了多少,那你需要一個營養成分的app資料庫,然後稱自己每天吃了那些含有蛋白質的食物,根據資料庫自己加。
例如,一名體重72.5 公斤的人,用1.2相乘就得出87,這意味著最佳的每日蛋白質攝入量是87克。
問題的關鍵是怎樣決定0.8-1.8這個系數。如果健康狀況良好,而且生活沒有太大壓力,應該選擇較低的數值,如0.8。但如果壓力很大,就應該選擇高值。孕婦或從事極端體力活動的人,以及從疾病中恢復的病人也應該選擇高值來計算每日蛋白質攝入量。
最後,請記住,沒有「神奇」的食物或營養補充劑能夠替代恰當的鍛煉和正確的飲食。無論是以減肥還是以增加肌肉為目的,碳水化合物、蛋白質和脂肪的均衡攝入,才是最基礎最健康的。