输入一个 n ,求从0到n的若干数中共含有多少个素数,并且输出具体素数的直!该怎么解决
输入一个 n ,求从0到n的若干数中共含有多少个素数,并且输出具体素数的直!!
声明不是作业,本人自学,没有老师给作业,都是自己给自己出题,昨天做了个梦,梦到了这个问题把我难住了(由于是初学所以难住了,嘎嘎).
问题如题;我给大家举个例子;
比如从键盘输入1000,那么要求输出 1000内总共含有多少个素数. 并且输出每个素数的直!
素数就是只能被 "它本身 "和1整除的整数.
------解决方案--------------------
#include <stdio.h>
int judge(int a)
{
int j;
for(j=2;j <=sqrt(a);j++)
{
if(a%j==0)
return 1;
}
return 0;
}
int main()
{
int i;
for(i=1;i <1000;i++)
{
if(judge(i)==0)
printf( "%d ",i);
}
return 0;
}
------解决方案--------------------
//简单的剔除法实现,效率还过得去,如下
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
int max;
cout < < "input the total number: ";
cin> > max;
int * sieve = new int[max + 1];
fill(sieve, sieve + max + 1, true);
sieve[0] = sieve[1] = false;
for (int n = 2; n < sqrt((double)max + 1); n++)
{
if (sieve[n])
{
for (int j = 2*n; j < max + 1; j += n)
sieve[j] = false;
}
}
int sum = 0;
for(int i = 2; i < max + 1; i++)
{
if(sieve[i])
{
sum++;
cout < < i < < " ";
}
}
cout < < "\n含有素数的总数是: " < <sum < <endl;
delete [] sieve;
}
------解决方案--------------------
#include <iostream.h>
main()
{
int test(int n);
int m;
cout < < "please input a number: " < <endl;
cin> > m;
for(i=2;i <=m;i++)
{
cout < <2 < < " ";
if(test(i)==0)
{
cout < <i < < " ";
}
}
int test(n)
{
int j;
for(j=2;j <sqrt(n);j++)
{
if(n%j==0)
{
return 1;
}
}
else return 0;
------解决方案--------------------
#include <stdio.h>
void main()
{
int n,i;
scanf( "%i ",&n);
for (;n> 1;n--)
{
for (i=n/2;i> 1;i=i-1)
{
if (n%i==0)
{
break;/*此数肯定不是素数*/
}/*if*/
if (i <=2)
{
printf( "prime No.:%i\n ",n);
}/*if*/
}/*for*/
}/*for*/
}/*main*/
------解决方案--------------------
记得给分啊,哈哈
小弟现在穷
------解决方案--------------------
#include <stdio.h>
main()
{
int i,j,k,n=0;
printf( "input a number: ");
scanf( "%d ",&k);
for(i=3;i <=k;i++)
{
j=2;
for(;i%j!=0;)
j++;
if(i==j)
{
printf( "%4d ",i);
n++;
if(n%8==0)
printf( "\n ");
}
}
printf( "\n ");
}
------解决方案--------------------
1不是素数,从2开始试,先从2到n取每个数,然后调用判断函数看它是不是素数,是就输出,不是就跳过。
判断函数是从2到sqrt( x )// x是要判断的数,用每个数去模x,如果模为0就强行跳出,后面用一个if看循环到了几,如果循环到了sqrt( x ),则是素数,否则不是素数,注意这里有个“差1问题”,好好想想,多试试就出来了。
声明不是作业,本人自学,没有老师给作业,都是自己给自己出题,昨天做了个梦,梦到了这个问题把我难住了(由于是初学所以难住了,嘎嘎).
问题如题;我给大家举个例子;
比如从键盘输入1000,那么要求输出 1000内总共含有多少个素数. 并且输出每个素数的直!
素数就是只能被 "它本身 "和1整除的整数.
------解决方案--------------------
#include <stdio.h>
int judge(int a)
{
int j;
for(j=2;j <=sqrt(a);j++)
{
if(a%j==0)
return 1;
}
return 0;
}
int main()
{
int i;
for(i=1;i <1000;i++)
{
if(judge(i)==0)
printf( "%d ",i);
}
return 0;
}
------解决方案--------------------
//简单的剔除法实现,效率还过得去,如下
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
int max;
cout < < "input the total number: ";
cin> > max;
int * sieve = new int[max + 1];
fill(sieve, sieve + max + 1, true);
sieve[0] = sieve[1] = false;
for (int n = 2; n < sqrt((double)max + 1); n++)
{
if (sieve[n])
{
for (int j = 2*n; j < max + 1; j += n)
sieve[j] = false;
}
}
int sum = 0;
for(int i = 2; i < max + 1; i++)
{
if(sieve[i])
{
sum++;
cout < < i < < " ";
}
}
cout < < "\n含有素数的总数是: " < <sum < <endl;
delete [] sieve;
}
------解决方案--------------------
#include <iostream.h>
main()
{
int test(int n);
int m;
cout < < "please input a number: " < <endl;
cin> > m;
for(i=2;i <=m;i++)
{
cout < <2 < < " ";
if(test(i)==0)
{
cout < <i < < " ";
}
}
int test(n)
{
int j;
for(j=2;j <sqrt(n);j++)
{
if(n%j==0)
{
return 1;
}
}
else return 0;
------解决方案--------------------
#include <stdio.h>
void main()
{
int n,i;
scanf( "%i ",&n);
for (;n> 1;n--)
{
for (i=n/2;i> 1;i=i-1)
{
if (n%i==0)
{
break;/*此数肯定不是素数*/
}/*if*/
if (i <=2)
{
printf( "prime No.:%i\n ",n);
}/*if*/
}/*for*/
}/*for*/
}/*main*/
------解决方案--------------------
记得给分啊,哈哈
小弟现在穷
------解决方案--------------------
#include <stdio.h>
main()
{
int i,j,k,n=0;
printf( "input a number: ");
scanf( "%d ",&k);
for(i=3;i <=k;i++)
{
j=2;
for(;i%j!=0;)
j++;
if(i==j)
{
printf( "%4d ",i);
n++;
if(n%8==0)
printf( "\n ");
}
}
printf( "\n ");
}
------解决方案--------------------
1不是素数,从2开始试,先从2到n取每个数,然后调用判断函数看它是不是素数,是就输出,不是就跳过。
判断函数是从2到sqrt( x )// x是要判断的数,用每个数去模x,如果模为0就强行跳出,后面用一个if看循环到了几,如果循环到了sqrt( x ),则是素数,否则不是素数,注意这里有个“差1问题”,好好想想,多试试就出来了。