问题标题: 酷町堂:酷町豆要多少?60以内都能考虑————3875 二进制质数 (请各位找错)

0
0
已解决
陈曦
陈曦
资深天翼
资深天翼

 

#include<iostream>
#include<cmath>
using namespace std;
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;
}
long long n,t=1,m=0,a[10005],i=0;
int main(){
    
    cin>>n;
    while(n){
        a[++i]=n%2;
        n/=2;
    }
    for(int j=1;j<=i;j++){
        m+=t*a[j];
        t*=10;		
    }
    if(zs(m)){
        cout<<"YES";
    }
    else{
        cout<<m;
    }
    return 0;
}

题目传送门

 

酷町豆要多少?60以内都能考虑。

 

 

不要网址!

不要蹭贴!

 

不要网址!

不要蹭贴!

 

不要网址!

不要蹭贴!

 

不要网址!

不要蹭贴!

 

陈曦在2020-06-07 08:23:27追加了内容

请各位找错

陈曦在2020-06-07 08:29:31追加了内容

.

陈曦在2020-06-18 19:44:20追加了内容

加悬赏啦!


0
已采纳
徐子玄
徐子玄
初级光能
初级光能

题目说了,n在10000以内!!变成二进制后long long存不下!!!就算存的下,为什么:

long long n,t=1,m=0,a[10005],i=0;//这个是long long

bool zs(int n)//这这个是int???

建议你们用超长整形:unsigned long long!

即把long long n,t=1,m=0,a[10005],i=0;改成unsigned long long n,t=1,m=0,a[10005],i=0;

把bool zs(int n)改成bool zs(unsigned long long n)就行了(其他不变)

AC愉快!

 

徐子玄在2020-06-20 10:20:39追加了内容

想起来了!!把你函数zs里的循环i变成unsigned longlong!

for(unsigned long long i=2;i<=sqrt(n);i++){

    if(n%i==0) return 0;

}

 

徐子玄在2020-06-23 12:17:26追加了内容

望采纳!你不写unsigned long long也行,但你要把所有int改为long long!也能AC!

0
0
王子逸
王子逸
新手天翼
新手天翼

给你个思路  先定义一个求二进制的函数 然后主函数里写判断质数的  这样不回超时 而且简单

0
董宇昊
董宇昊
初级启示者
初级启示者

这是我们的课后讲义,希望对你有帮助

董宇昊在2020-06-16 21:32:25追加了内容

进制转换课堂讲义(v2)

进制转换课后讲义

 

引言

 
       日常生活中我们一般用十进制来计数,逢十进一。
       比如从1数到9都是一位数,然而到10就变成了两位数,发生了进位。
       从19往上数是20,也发生了进位:19的个位9加1之后变成10,个位装不下了,所以进位。
       然而除了十进制,人们还发明了别的计数制(进制),比如计算机内部存储数据用的是二进制。除此之外还有八进制,十六进制等等……
       这节课我们就来学习十进制数与二进制数的互相转化。
 

一、课堂知识

1. 什么是进制

       进位制计数法是一种记数方式,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数底数,底数为n,即可称n进制。(逢n进1
       如:十进制的底数是10 ,逢10进1,我们使用0~9这10个数字表示十进制的所有数;
       二进制的底数是2,逢2进1,我们使用0和1这两个数字就可以表示二进制的所有数。
      
       对于底数超过十的进制的数字,除了用0~9的数字,还需要用到大写字母来表示该进制的数字。比如需要用0~9以及大写字母A来表示十一进制的数字,其中A的数值等效于11。

2. 不同进制数字的表示方法

       在数字的右下角写上底数(加括号)。
       如:十进制的123: 123(10)
       二进制的1101: 1101(2)

3. 二进制数与十进制数的互相转化

二进制与十进制的对应关系
image.png

1)二进制转十进制

 
原理: 将二进制数的每一位乘以相应的系数再相加,即得到对应的十进制数字。
如:将1101(2)转换成十进制数: 将1101从右到左每个数乘以20, 21, 22, 23
1*20+0*21+1*22+1*23 = 1+0+4+8 =13

代码实现:

输入一个二进制数n,将它转换成十进制形式输出

思路:每次取二进制数的最后一位(n%10),乘以相应的系数,加到最终的结果中,加完之后把这最后一位删掉(n/=10),系数每次也要做相应的改变。


 

#include<iostream> using namespace std; int main() { long long n,w,s=0,t=1; //s:用于存储十进制结果, t:系数的初值为1 cin>>n; while(n) { w=x%10; //取n的最后一位 s=s+w*t; //将二进制最后一位数乘以相应的系数加到和s中 t=t*2; //系数扩大2倍 n=n/10; //去掉n的最后一位 } cout<<s; return 0; }

2)十进制转二进制

 
原理: 十进制整数转换为二进制整数采用 “除2取余,逆序排列” 法。

具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时终止,然后将这些余数按照得到的顺序从后往前依次排列起来。

代码实现


 

#include<iostream> using namespace std; int a[100]; int main() { long long n; cin>>n; int i=0; while(n){ a[++i]=n%2; //除2取余,将余数存进数组 n/=2; } for(int j=i;j>=1;j--) //逆序输出 cout<<a[j]; return 0; }

二、课堂练习详解

 
3871 M位二进制数

分析: 首先因为数字可能有100位,所以这里应该把数字定义成字符串来输入。
数字的前m位对应字符串下标0~m-1的元素,则从右往左分别将每个数字(注意字符数字要减掉’0’才得到对应的数字)乘以相应的系数,再相加得到结果。


 

#include <iostream> #include <string> using namespace std; int main(){ int m,ans=0,t=1; cin>>m; string s; cin>>s; for(int i=m-1;i>=0;i--){ //从第m个数字到第1个数字 ans+=(s[i]-'0')*t; //每个(转化过的)数字乘以相应系数再相加 t*=2; //系数扩大两倍 } cout<<ans; return 0; }

 
3872 二进制最小公倍数

分析: 首先按照“除2取余”把十进制数n每一步除以2的余数放进数组,然后不能“逆序输出”,而是要重新组成一个新的数字,最后对两个数字求最小公倍数。


 

#include<iostream> using namespace std; int main(){ int a[101]; //数组存储余数 int n,i=0,t; cin>>n; t=n; while(t){ //除2取余 a[++i]=t%2; t/=2; } int m=0; //m用来存储转化的二进制数 for(int j=i;j>=1;j--){ //把数组元素逆序加到m中 m=m*10+a[j]; } for(i=min(m,n);i>=1;i--){ //求最大公约数 if(n%i==0 && m%i==0){ break; } } cout<<m*n/i; //公式法求最小公倍数 return 0; }

董宇昊在2020-06-16 21:33:13追加了内容

这是我们的课后讲义

 

0
0
董子墨
董子墨
中级天翼
中级天翼

你的错误:

一、你特判1了吗???

二、除2取余,倒序输出!你这是正序!!!

0
黄子扬
黄子扬
初级天翼
初级天翼

吐槽题目表述不清

假设输入10

请问是判断10(10)是不是质数还是(1010(2))(10)是不是质数

0
李瑞曦
李瑞曦
高级天翼
高级天翼

可以将十进制转二进制的代码与判断素数的代码结合

李瑞曦在2020-06-06 22:40:04追加了内容

李瑞曦在2020-06-06 22:40:43追加了内容

望采纳

0
李瑞曦
李瑞曦
高级天翼
高级天翼

n的值会变,要用变量存起来

0
0
李瑞曦
李瑞曦
高级天翼
高级天翼

我把你的代码改了一下,70分:

我要回答