
1、找到这个数字的平方根m=√m
2、找到不大于m的所有质数。
3、在一张自然数表上划掉所有质数的整数倍(质数本身不划掉)
4、把1划掉。
5、没有划掉的数字就是质数。
例如,我们要找到100以内的所有质数,只需要按照下面的步骤进行:
1、计算100的平方根,是10。
2、10以内的质数有2、3、5、7
3、划掉2、3、5、7的整数倍。首先划掉2的倍数,如4、6、8…、98、100,然后划掉3的倍数,如6、9、12、15、…、99, 重复的就不需要再划掉了。然后划掉5的倍数,7的倍数。
4、最后划掉1。
扩展资料
质数与黎曼猜想
我们之前谈到:质数与黎曼猜想之间有着千丝万缕的联系。1896年,法国科学院举行比赛:征稿证明黎曼定理。两位年轻的数学家阿达马和德·拉·瓦莱布桑获得了这一殊荣。
实际上这两位数学家并没有证明黎曼猜想,只是获得了一点进展,但是这一点进展就一举证明了欧拉和勒让德的猜想,把素数猜想变成了素数定理。黎曼猜想的威力可见一斑。
1901年,瑞典数学家科赫证明:如果黎曼猜想被证实,那么素数定理中的误差项c大约是√xln(x)的量级。
即便黎曼猜想被证实,人们也只是在质数规律探索的过程中更近了一步,距离真正破解质数的规律,还有很长的路要走。也许质数就是宇宙留给人类的密码。
基本思路是对的。
从2到它本身减一的数一个一个算。少了一些东西,主函数后的花括号,还有循环里面的if语句什么都没有执行,printf也只能输出一个数,数字也没有定义。:帮你修改了一下……楼主看一看,我试过了可行的
#include<stdioh>
void main()
{
int i,m;
for(i=3;i<=100;i++)
{
for(m=2;m<i;m++)
{
if(i%m==0) break;/有被整除的数,提前退出,省时间也为后面做准备/
}
if(m==i) printf("%d ",i);/循环正常退出,说明找到了质数/
}
}
希望楼主采纳!
1000以内的话,每个数都不超过4位, 按照占5位或以上打印就行
printf("%5d",num);//位宽5, 前面添空格, 要左对齐的话,后面添,用%-5d
#include <stdioh>
#include <mathh>
int IsPrim(int n)
{
int i,j;
j=sqrt(n);
for(i=2;i<=j;i++)if(n%i==0)return 0;
return 1;
}
int main()
{
int i,n;
for(i=2,n=0;i<=1000;i++)
{
if(IsPrim(i))
{
printf("%-5d",i);
if(++n%5==0)printf("\n");
}
}
printf("\n");
return 0;
}
如果N是一个大于等于2的整数,并且只有1和N本身是它的因子,没有别的正因子,则称N是一个素数(质数)。
#include"stdioh"
main()
{
int i,n,num;
for(n=0,num=0;n<=300;n++)
{
i=2;
while(i<n&&n%i!=0)
i++;
if(i==n)
{
printf("%6d",n);
num++;
}
}
printf("n素数个数为%d",num);
}
别浪费了我的宝贵时间!
//#include "stdafxh"//If the vc++60, with this line
#include "stdioh"
#include "stdlibh"
int prime(int n){
int i;
if(n>2 && !(n&1) || n<2)
return 0;
for(i=3; ii<=n;i+=2)
if(!(n%i))
return 0;
return 1;
}
int main(void){
FILE fp;
int np,n,x;
if((fp=fopen("123txt","r"))==NULL){
printf("Open the file failure\n");
exit(0);
}
np=n=0;
while(fscanf(fp,"%d",&x)>0){
n++;
if(prime(x))
np++;
}
fclose(fp);
printf("The result is %d:%d\n",np,n);
return 0;
}
程序如下:
#include <stdioh>
main(){
int i,j,ok;
i=2;
while(i<2000)
{
ok=1;
j=2;
while(ok==1 && j<i)
{
if (i%j==0) ok=0;
j++;
}
if (ok==1) printf("%d\t",i);
i++;
}
}
运行结果如下:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229
233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349
353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463
467 479 487 491 499 503 509 521 523 541
547 557 563 569 571 577 587 593 599 601
607 613 617 619 631 641 643 647 653 659
661 673 677 683 691 701 709 719 727 733
739 743 751 757 761 769 773 787 797 809
811 821 823 827 829 839 853 857 859 863
877 881 883 887 907 911 919 929 937 941
947 953 967 971 977 983 991 997 1009 1013
1019 1021 1031 1033 1039 1049 1051 1061 1063 1069
1087 1091 1093 1097 1103 1109 1117 1123 1129 1151
1153 1163 1171 1181 1187 1193 1201 1213 1217 1223
1229 1231 1237 1249 1259 1277 1279 1283 1289 1291
1297 1301 1303 1307 1319 1321 1327 1361 1367 1373
1381 1399 1409 1423 1427 1429 1433 1439 1447 1451
1453 1459 1471 1481 1483 1487 1489 1493 1499 1511
1523 1531 1543 1549 1553 1559 1567 1571 1579 1583
1597 1601 1607 1609 1613 1619 1621 1627 1637 1657
1663 1667 1669 1693 1697 1699 1709 1721 1723 1733
1741 1747 1753 1759 1777 1783 1787 1789 1801 1811
1823 1831 1847 1861 1867 1871 1873 1877 1879 1889
1901 1907 1913 1931 1933 1949 1951 1973 1979 1987
1993 1997 1999
内的2,3,5,7的倍数(除2之外)去掉,就是所有质数啦
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int i,j,sum=0,k=0;
bool flag=true;
for(i=2;i<=100;i++)
{
if(i==2 || (i%2!=0 && i%3!=0 && i%5!=0 && i%7 != 0) )
{
if(k%5==0)
cout<<endl; //每5个换一行
k++;
cout<<i<<" ";
sum += i;
}
}
cout<<endl;
cout<<"总和为:"<<sum<<endl;
return 0;
}
素数求法有很多种。。如果不要求时间暴力尝试是可以的。用算法的话个人认为还是用这个方法最快最好,就是把不是素数的数字排除,剩下的就是素数了。这个程序蛮简单的。。你看看能不能理解ps:这是我们acm培训的内容,很难得哦
void getprime(int n) //n是素数筛选区间
{
int i , j ;
bool flag[N];
memset ( flag , true , sizeof ( flag ) );
int count = 0; //记录找到的素数个数
for( i=2 ; i<=n ; i++ )
{
if ( flag[i] ) prime[++count]=i; //未被筛掉的就是素数
for( j=1 ; j<=count && iprime[j] <= n ; j++) // prime[j]表示第j个素数
{
flag[ iprime[j] ] = false; //iprime[j]表示被i筛掉的
if( i%prime[j]==0 ) break;
}
}
}
这个算法是一个很快的算法,详细的解释是举例:
i=6的时候,prime[ ]={2,3,5}
第一次6筛掉了62=12,然后判断6%2==2,break;假设循环没有break,接着6即将筛63=18,而事实上18是被9筛掉的。
统一化分析:
不妨设i=pr (p<r),执行break是因为i%p==0,故此时i筛掉的是x1=ip=(pr)p;如果i可以筛掉x1后面的数x2,x2=iq=(pr)q
由x2>x1-》q>p;那么x2可以写成x2=(qr)p,由于 qr>i ,所以x2一定可以被i之后某个数字(qr)筛掉,就不需要用i去筛掉。
以上就是关于如何算出一个数的所有质数全部的内容,包括:如何算出一个数的所有质数、用C程序求100以内的质数、求C语言程序设计:输出2~1000内所有质数。要求:输出每行5个数,数与数上下对齐!求解答啊~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)