程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 考察二進制知識

考察二進制知識

編輯:C++入門知識

[cpp]   /*    類型:數論         給你一個N,讓你找到最小的M使得(2 ^ N - 1) % (2 ^ M - 1) = 0。  2 ^ N的二進制數一定是1後面跟隨一些0,那麼2 ^ N - 1的二進制數每一位上都是1了,  所以要想使(2 ^ N - 1) % (2 ^ M - 1) = 0,  那麼其實只要使2 ^ N - 1的二進制數裡1的個數能整除2 ^ M - 1的二進制裡1的個數就能保證(2 ^ N - 1) % (2 ^ M - 1) = 0。(想一想為什麼)  當輸入N時,那麼(2 ^ N - 1)的二進制數的1的個數就是N。  那麼此題就是一道水題了,問題變成了求N的最小質因數M。    解析:這道題目很奇葩,算是主要考察 二進制的算法吧。。  比如說:10101010 有因子1,10,1010,,也就是說可以分成整數個相同的子片段,或者將二進制末尾去0,如1010101片段  該子片段就能整除原段。。     */   #include<iostream>   #include<cstdio>   #include<cmath>   using namespace std;      int main(){       int n;       while(scanf("%d",&n)!=EOF){           int flag=0;           if(n%2==0) {  ///剪枝                printf("2\n");                continue;            }  www.2cto.com         int x=(int)sqrt(1.0*n);           for(int i=3;i<=x;i+=2)               if(n%i==0){                    printf("%d\n",i);                    flag=1; break;                }           if(!flag)                printf("%d\n",n);       }   }         

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved