zoukankan      html  css  js  c++  java
  • Ecust DIV3 k进制 【暴力不断优化】

    K进制

    Description

    给定一个正整数n,请你判断在哪些进制下n的表示恰好有2位是1,其余位都是0。

    Input

    输入第一行为整数TT,表示有TT组数据(1 le T le 50)(1T50)

    每组数据包含一个整数n(3 le n le 1000000000)n(3n1000000000)

    输入保证一定有解

    Output

    对于每组数据,从小到大输出每一个符合要求的进制,每个一行

    Sample Input 1 

    1
    10

    Sample Output 1

    2
    3
    9
    看着题解做的。
    恰好有2位是1,其余位都是0。 所以 n = pow(k,a) + pow (k,b) 且 a != b;
    实现的时候容易超时,最开始用的三重循环,稳稳地超时。
    然后修改了一下 用 temp = pow(k,b) = n - pow(k,a),然后用while循环计算出b的值。 还是超时
    处理 j = k,a = 1, 每次j*=k,a++; j < n 的时候继续循环。

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    int main(){
    	int t;
    	cin>>t;
    	while(t--){
    		ll n;
    		cin>>n;
    		for(ll k = 2; k*k <= n; k++)
    			for(ll a = 1,j = k; j < n; a++, j =j*k){
    				ll b = 0;
    				ll temp = n - j;
    				while(temp%k==0) {
    					temp/=k;b++;
    				}
    				if(temp == 1 && a != b){
    					cout<<k<<endl;break;
    				} 
    			}
    			
    		cout<<n-1<<endl;
    		
    	}
    	return 0;
    }
    
  • 相关阅读:
    第四周进度条
    单元测试
    第四周开发日志(psp)
    软件工程个人作业03
    第四周课堂作业——单元测试
    进度条 第三周
    开发日志
    软件工程个人作业2
    《构建之法》阅读笔记01
    第一二周进度条
  • 原文地址:https://www.cnblogs.com/stul/p/10012054.html
Copyright © 2011-2022 走看看