这次记录一道ACM很简单的一道题。
题目意思呢是:输入三个数。a,d,n;
然后形成一个序列:a,a+d;a+2d;a+3d…………
从中寻找素数,输出第n个素数。
素数呢,就是只能整除1和它本身的数。
贴个判定素数的代码:
bool sushu(int a)
{
float a1;
a1=a;
int i,k;
k=sqrt(a1);//sqrt()函数为求根号函数,需要加头文件:#include<cmath>
if(a==1)//此处注意,我之前就是忘了有a=1这种情况,而提交失败。a=1时,直接返回false,不是素数。
return false;
for(i=2;i<=k;i++)
{
if(a%i==0)
return false;
}
return true;
}
做这道题我的思路呢是这样的。先建一个数组k,然后对a,a+d,a+2d……一个个的判定,是否是素数,若是,则存入数组。那么结果只要输出k[n-1]就可以了。
以下是完整代码:
#include<iostream>
#include<cmath>
using namespace std;
bool sushu(int a);//判断是否素数,是返回true,否返回false
int main()
{
int a,b,c;
while(1)
{
int i;
cin>>a>>b>>c;
if(a==0&&b==0&&c==0)
break;
int *k=new int[c];
for(i=0;i<c;)
{
if(sushu(a))
{
k[i]=a;
i++;
}
a=a+b;
}
cout<<k[c-1]<<endl;
}
return 0;
}
bool sushu(int a)
{
float a1;
a1=a;
int i,k;
k=sqrt(a1);
if(a==1)
return false;
for(i=2;i<=k;i++)
{
if(a%i==0)
return false;
}
return true;
}
这道题虽然很简单,但是我一开始做的时候还是遇到了不少的问题。大多是由于我自己的基础不够扎实造成的。
比如不知道如何判定是否是素数。(这个很简单,知道素数的定义应该就明白了)。
还有一个是,我不习惯调用函数,老是把所有代码都写在主函数中,又麻烦,又不易理解,容易错。不是一个好习惯,以后改正。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。