0
已解决
万韧山
初级天翼
初级天翼
题目链接: 酷町堂:6750
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int er(int n){ //转换为二进制
int p=0,a[500],r;
while(n){
a[++p]=n%2;
n/=2;
}
for(int i=p;i>=1;i--){
r=r*10+a[i];
}
return r;
}
bool zs(int n){//判断质数
if(n<=1) return 0;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0) return 0;
}
return 1;
}
bool v(int n){ //判断转换为二进制之后1的个数为质数
for(int i=1;i<=n;i++){
int y=er(i);
bool s=zs(y);
if(s){
return 1;
}else{
return 0;
}
}
}
int main()
{
int a,b;
int cnt=0;
for(int i=a;i<=b;i++){
if(v(i)) cnt++;
}
cout<<cnt;
return 0;
}
所以我没学过位运算。。。
所以我的代码输出0。。。
所以请求大佬帮助qwq
0
已采纳
任欣怡
资深守护
资深守护
看题昂:【数据说明】
1≤a≤b≤106
且b-a的最大值为10000
这题的数据范围比较大
所以在写转二进制的函数时要用long long
第三个函数有点问题
看题:找出整数转换为二进制之后1的个数为质数的总数目。
你转换成二进制后
你要循环取位数,遍历这个数
如果有一位是1,那么记录
最后再判断当前这个数的二进制下1的个数是否为质数
第39行的循环已经将当前这个数遍历了一遍
所以我们只需要对当前这个数进行处理就行
第25行的循环改成取位数就行
改一下吧
加油你能行ヾ(◍°∇°◍)ノ゙
PS:我记的笔记好多QAQ有时间就打一点别急昂
0
李奕歌
初级天翼
初级天翼
核心:
int a,b,ans,cnt,w;
for(int i=a;i<=b;i++){
w=i;
while(w){
if((w&1)==1){
cnt++;
}
w=w>>1;
}
if(f(cnt)){
ans++;
}
cnt=0;
}
0
0
宋子墨
新手天翼
新手天翼
只用判断质数的函数
定义数组c[105]
定义a,b,t,cnt=0,jy=0,p
cnt用来计1的个数是质数的个数
jy用来计单个二进制1的个数
t是用来转换成二进制的(t/=2)
p是用在c数组里
数组c[105]是用来计二进制的每个位的
输入a,b;
循环a到b
t为i
p为0
jy为0
把t转换成二进制(c数组来计,转换完输出时不输出,改成成if(c[j]==1) jy++)
如果jy是质数
cnt++
最后输出cnt
0
0
0
任欣怡
资深守护
资深守护
课堂笔记给你昂
位运算
1.按位与 &
5&2
0&1=0
0&0=0
1&0=0
1&1=1
与逻辑运算符与(&&)类似
2个数a,b进行按位与操作时
是将对应的二进制数,最低位对齐,高位补0
每一位进行按位与运算
最后的结果再转换成10进制数
例:
5的二进制数:101
2的二进制数:10
1 0 1
0 1 0
————
0 0 0
5&2=0
阿巴巴打不完了
先发一部分吧
0
0