这一题首先呢,要先输入头文件和命名空间然后定义主函数,里面定义两个整型变量a和b,然后就可以输出a+b的值
好的,首先我们定义一个函数,用来判断一个数是否是素数,这个函数其实和性感素数里面的函数是一模一样的:
int nn(int a)
{
for(int i=2;i<=sqrt(a);i++)//循环到a的算数平方根次就行了。
if(a%i==0)return false;//如果a出的尽i,那么返回false。
return true;//否则返回true。
}
然后回到主函数,定义整型变量n
,while循环一直输入n
,然后定义一个bool型变量a,初始化为false。
然乎用一个for循环:
for(int i=11;i<n;i++)//从11开始循环就行,因为题目要求的是寻找个位为1的素数。
{
if(nn(i)==true){//判断i是否为素数。
char z[1001]={0};//定义字符数组,并初始化为0。
sprintf(z,"%d",i);//把数字i转换为字符数组z。
if(z[strlen(z)-1]=='1'){//判断个位是否为1。
cout<<i<<' ';//输出i。
a=true;//把a变为true。
}
}
}
退出for循环后,我们要判断a是不是false,因为如果a为false,就说明2到n-1之间没有个位为一的数,输出-1。
换行,第一种方法的程序结束。
(第一种)程序如下:
#include<bits/stdc++.h>
using namespace std;
int nn(int a)
{
for(int i=2;i<=sqrt(a);i++)
if(a%i==0)return false;
return true;
}
int main(){
int n;
while(cin>>n){
bool a=false;
for(int i=11;i<n;i++)
{
if(nn(i)==true)
{
char z[1001]={0};
sprintf(z,"%d",i);
if(z[strlen(z)-1]=='1'){
cout<<i<<' ';
a=true;
}
}
}
if(a==false)cout<<"-1";
cout<<endl;
}
}
其实这一题不需要用sprintf函数,也不需要用到bool型变量,这样程序就显更得好理解。我后来想起,可以如此做。
(第二种)程序如下:
#include<bits/stdc++.h>
using namespace std;
int nn(int a)
{
for(int i=2;i<=sqrt(a);i++)
if(a%i==0)return false;
return true;
}
int main(){
int n;
while(cin>>n){
//bool a=false;
for(int i=11;i<n;i++)
{
if(nn(i)==true)
{
/*
char z[1001]={0};
sprintf(z,"%d",i);
if(z[strlen(z)-1]=='1'){
cout<<i<<' ';
a=true;
}
*/
if(i%10==1)cout<<i<<' ';//判断个位是否为0。
}
}
//if(a==false)cout<<"-1";
if(n<=11)cout<<"-1";//如果n<=11,那么就没有个位为1的素数。
cout<<endl;
}
}
???互赞~
好,加油hh