#include<stdio.h>
#include<math.h>
int sushu(int n)
{
if(n<2) return 0;
else
{
for(int j=2;j<=sqrt(n);j++)
{
if(n%j==0)
return 0;
}
return 1;
}
}
int main()
{
int x,y,i,temp;
int s=0;
scanf("%d %d\n",&x,&y);
if(x>y)
{temp=x;
x=y;
y=temp;}
for(i=x;i<=y;i++)
{
if(sushu(i))
s++;
}
printf("%d\n",s);
return 0;
}
如果把自定义的函数放在主函数里面,充当一个for循环就会导致时间超限 ,当然还有一个关键的点在于,当进行一个素数比较大小的时候,只需要将其循环到sqrt(i)的位置就可以了,这样可以大大减少循环的次数,减少时间限制,然后此处注意,1不是素数,要单独排除在外,另外是后面的循环从2开始进行.
题目 2975: 1的个数
#include<stdio.h>
#include<math.h>
int main()
{
long int n;
int i=0,s=0;
int a[100000001];
scanf("%ld\n",&n);
//转换为二进制
while(n)
{
a[i]=n%2;
if(a[i]==1)
{s++;}
n=n/2;
i++;
}
printf("%d\n",s);
return 0;
}
转换为二进制,然后进行一个一个查1就可以了