如题所述
第一,你是素数,输出素数意味着你得从2,3…开始一个个推。
第二,大于m的k个,那么就是当算得的某个素数发现大于m了,就开始一个个往外输出,输出k个
第三,特殊情况处理,如输入k可不可以小于0,m小于0怎么办,可不可以等于0。
第四,少许的算法优化。
我用python举个例子,你说你要什么语言的我在试着谢谢。关键理清逻辑。
class PrimeFactory():prime_list = [3]
def produce(self):
yield 2
i = 5
yield 3
while True:
limit = int(pow(3,1/2))
for prime in self.prime_list:
if prime > limit:
self.prime_list.append(i)
yield i
break
elif i % prime == 0:
break
i += 2
if __name__ == '__main__':
k = input()
k = int(k)
m = input()
m = int(m)
print ("k=%s,m=%s"%(k,m))
if m < 0:
raise Exception('Variable m must not be less than 0.')
prime_factory = PrimeFactory()
for p in prime_factory.produce():
if p > k:
if m <= 0:
break
else:
print(p)
m -= 1
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-05-02
本回答被提问者采纳
第2个回答 2011-05-02
#include <stdio.h>
#include<math.h>
void main()
{int m,k,i,n=0;
scanf("%d%d",&m,&k);
while (n<k)
{
for(i=2;i<=sqrt(m);i++)
if(m%i==0)
break;
if (i>sqrt(m))
{ printf("%d\t",m);
n++;}
m++;
}
}
输入2 5,显示 2 3 5 7 11
输入9 4,显示11 13 17 19
你可以试试,我认为可以满足你的要求...追问
#include<math.h>
void main()
{int m,k,i,n=0;
scanf("%d%d",&m,&k);
while (n<k)
{
for(i=2;i<=sqrt(m);i++)
if(m%i==0)
break;
if (i>sqrt(m))
{ printf("%d\t",m);
n++;}
m++;
}
}
输入2 5,显示 2 3 5 7 11
输入9 4,显示11 13 17 19
你可以试试,我认为可以满足你的要求...追问
写一程序,其功能是:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。输出结果。
写一程序,其功能是:输入m的值(2<=m<=9),在m行m列的二维数组中存放如下所示的数据,将结果输出在显示上。
#include
void main()
{int a[10],i,s=0,t=0,temp,min,max;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
min=max=a[0];
for(i=1;i<10;i++)
{if(max<a[i])
{max=a[i];t=i;}
else
{min=a[i];s=j;}
}
temp=a[0];a[0]=a[t];a[t]=temp;
t=a[9];a[9]=a[s];a[s]=temp;
}
没运行过,应该是正确的...
第二个不清楚,看不完题目...