| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3060 人关注过本帖
标题:数太大unsigned long long也数出不了
只看楼主 加入收藏
zp666
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-9-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
数太大unsigned long long也数出不了
#include"stdio.h"
#include"stdlib.h"
#include"math.h"
int main()
{
    unsigned long long int P,s,n=1,k,i=0,m,y,sp=0;
    scanf("%llu",&k);
    do{
        s=pow(2,n)-1;
        P=pow(2,n-1)*s;n++;
        for(m=2;m<=s;m++){
            if(s%m==0){break;}
        }if(m==s){m=1;}else{continue;}
        for(m=1;m<P;m++){
            if(P%m==0){
                sp+=m;
            }
        }if(sp==P){m=1;i++;}else{i++;continue;}
    }while(i<k);
    printf("%llu=%llu*%llu",P,P/s,s);

   
    return 0;
 }
输入6以后就不行了,求解决!!!
搜索更多相关主题的帖子: unsigned if long for include 
2021-09-14 21:15
牧人马
Rank: 4
等 级:业余侠客
威 望:6
帖 子:49
专家分:229
注 册:2017-12-24
收藏
得分:10 
输入了1-7,后面两数相乘运算时间太长了,不太清楚题目要求干什么,非要这么算可以看一下大整数乘法的算法
2021-09-14 22:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
根本看不懂你想干什么,为什么不将题目贴出来呢?
2021-09-15 11:47
zp666
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-9-14
收藏
得分:0 
回复 3楼 rjsp
题目要求的是求前八个完全数,可我这个只能求前5个,后面直接输出不了
2021-09-15 22:07
zp666
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2021-9-14
收藏
得分:0 
回复 2楼 牧人马
嗯嗯
2021-09-15 22:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
本子论坛是“C++”,但你的代码看起来又像“C语言”。那我是给你 C代码呢,还是给 C++代码?

程序代码:
#include <cstdio>
#include <climits>

// 这个判断“素数”的算法是我随手乱写的,因为它不是本题的重点,你可以自行更换成效率比较高的算法
bool is_prime( unsigned long long n )
{
    if( n == 2 ) return true;
    if( n<2 || n%2==0 ) return false;

    for( unsigned long long i=3; i*i<=n; i+=2 )
        if( n%i == 0 )
            return false;
    return true;
}

// 求完美数
// 完美数定义: “自身的真因子之和”等于“自身”,例如 6、28、496、……
// 完美数性质: 当 2^p-1 是质数时(此时p一定也是质数),(2^p-1)*2^(p-1) 是一个完全数
int main( void )
{
    // (2^p-1)*2^(p-1) 的二进制形式是 111…(p个1)…1000…(p-1个0)…0,所以p不能超过unsigned long long位数的一半
    for( unsigned long long p=2; p<=sizeof(unsigned long long)*CHAR_BIT/2; p=(p-1)/2*2+3 )
    {
        if( !is_prime(p) || !is_prime((1ull<<p)-1) ) continue;

        unsigned long long a = (1ull<<p)-1; // 2^p-1
        unsigned long long b = 1ull<<(p-1); // 2^(p-1)
        unsigned long long c = a<<(p-1); // (2^p-1)*2^(p-1) 
        printf( "%llu = %llu * %llu\n", c, b, a );
    }
}


输出
6 = 2 * 3
28 = 4 * 7
496 = 16 * 31
8128 = 64 * 127
33550336 = 4096 * 8191
8589869056 = 65536 * 131071
137438691328 = 262144 * 524287
2305843008139952128 = 1073741824 * 2147483647

2021-09-16 08:52
快速回复:数太大unsigned long long也数出不了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016211 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved