当前位置:编程学习 > C/C++ >>

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 。。。。。。
补充:求一个完整程序。。。
答案:已经帮楼主写好,测试正确~~~
#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怎么办

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,