质素的算法
‘壹’ 判断整数是否分解成两个质素的高效算法
这个问题,首先用小质数测试。 通过之后:
然后,尝试用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。但如果压力很大,就应该选择高值。孕妇或从事极端体力活动的人,以及从疾病中恢复的病人也应该选择高值来计算每日蛋白质摄入量。
最后,请记住,没有“神奇”的食物或营养补充剂能够替代恰当的锻炼和正确的饮食。无论是以减肥还是以增加肌肉为目的,碳水化合物、蛋白质和脂肪的均衡摄入,才是最基础最健康的。