C语言问题
求一个程序,能算出以10^n为中心一定范围内质数的个数和比例。比如: 以100为中心,91~110的数里质数是5个,比例是5/20=1/4 以1000为中心,910~1100里质数是30个,比例是30/200=1/6.607 以10000为中心,9100~11000里质数是218个,比例是218/2000=1/9.174 。。。。。。
补充:求一个完整程序。。。
求一个程序,能算出以10^n为中心一定范围内质数的个数和比例。比如: 以100为中心,91~110的数里质数是5个,比例是5/20=1/4 以1000为中心,910~1100里质数是30个,比例是30/200=1/6.607 以10000为中心,9100~11000里质数是218个,比例是218/2000=1/9.174 。。。。。。
补充:求一个完整程序。。。
答案:已经帮楼主写好,测试正确~~~
#include<stdio.h>
#include<math.h>
int count=0; //全局变量count用于保存质数的个数。。。
long power(int a,int b) //power用于求10的N次方
{
int i;
long result=1;
for(i=0;i<b;i++)
{
result*=a;
}
return result;
}
float zhishu(long n,long lower,long higher) //n为10的次方数,lower为最低范围
//higher为最高范围
{
long i,j;
float result;
for(i=lower*power(10,n-2);i<=higher*power(10,n-2);i++) //外层循环循环符合范围内的数
{
for(j=2;j<sqrt(i);j++) //内存循环判断是否为指数
{
if((i%j)!=0) continue;
else break;
}
if(j>sqrt(i))
count++; //统计个数
}
result=count/(float)((higher-lower+1)*power(10,n-2)); //result保存结果
return result;
}
int main(void)
{
long n,lower,higher;
float result;
printf("please input n,lower and higher:\n");
scanf("%ld,%ld,%ld",&n,&lower,&higher);
result=zhishu(n,lower,higher); //此程序lower和higher的值可随n而改变
printf("count=%d,result=%f",count,result);
return 0;
}
输入:2,91,110
输出:0.25
输入:3,91,110
输出:0.145000
其他:基本思想从(100-(值域除以2在加1)) 到(100+(你想要的值域除以2再减1))求素数储存在一个整形数组里
素数求法:flag =0
for循环从2到小于那个数,出现整除flag记作1
检查flag 质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
#include "stdio.h"
main()
{
int x,i,n=0,m=0;
printf("\n 请输入一个中心数");
scanf("%d",&x);
for(i=x*0.9+x/100;i<=x*1.1;i++,m++)
{ for(j=2;j<i;j++) /* j的循环范围正好除了1 和本身*/
if(i%j==0)
break; /*如果能整除则中断循环,此非质数*/
if(j>=i)
n++; } /* n统计个数,m 统计总数*/
printf(" 比例是 %d/%d=%d/%g",n,m,n/n,m/n);
} 筛选法求质数 #include<stdio.h>
bool Is_sushu(int i)
{
int j;
for(j=2;j<=i/2;j++)
if(i%j==0)
return 0;
return 1;
}
void main()
{
int n;
int i;
int range;
int result=1;
int sum=0;
printf("please enter n(n>0)of 10^n:\n");
scanf("%d",&n);
if(n<1)
{
printf("error!\n");
return;
}
for(i=0;i<n;i++)
result*=10;
range=result/10;
for(i=result-range+range/10;i<=result+range;i++)
{
if(Is_sushu(i))
sum++;
}
printf("The num is:%d,ratio is:%f\n",sum,sum/(float)(2*range-range/10+1));
} int fun(int from,int to)
{
int n=0;
for(int i=from+1;i<to;i++)
{
for(int j=2;j<i;j++)
{
if(i%j==0)n++;
}
}
return n;
}
void main(){
int NUM=0;
while(NUM<2){
scanf("%d",NUM);
}
int a=0;
float b=0.0;
a=fun(10^NUM-9*10^(NUM-2),10^NUM+10^(NUM-1));
b=a/(2*10^(NUM-1));
return 0;
}
上一个:能不能推荐一些c语言面向对象编程的书籍。。 关键就是c语言如何实现面向对象的思想的书籍。。
下一个:在C语言编程中出现undeclared indentifer怎么办