| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3987 人关注过本帖, 1 人收藏
标题:一道新生赛的题目
只看楼主 加入收藏
莫名Vet
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-3-6
收藏
得分:0 
回复 25楼 xzlxzlxzl
不好意思,还是超时了;;
2017-03-09 23:21
莫名Vet
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-3-6
收藏
得分:0 
输入格式
多case(最多1000个),每个case一行,给出两个正整数m和n,最后一行是两个0表示结束


输出格式
每个case输出一个结果,最后的两个0不用处理
2017-03-09 23:30
莫名Vet
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-3-6
收藏
得分:0 
回复 21楼 九转星河
网址  acm.scau.
新生赛12年 华山论剑 简单与复杂
2017-03-09 23:37
莫名Vet
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-3-6
收藏
得分:0 
回复 28楼 azzbcc
不知道为什么 就是错误.....
2017-03-09 23:40
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
回复 29楼 azzbcc
高!
我的代码测试数据“9952 6234”,肯定超时了,超过1秒了。正在冥思苦想新的算法:需要一个质数表好理解,对寻找互质集合和快速质数模还在思考中...
好像找到一点投机取巧的规律,比如m*n-1是素数时,它的因素是(m*n-1)-1的2的倍数的因数,比如“9952 6234”就是((9952*6234-1)-1)/2=31020383,“9952 6231”=((9952*6231-1)-1)/(2*5)=6201091,但这样算不能推而广之,我再想想,补补欧拉函数方面的知识!
2017-03-10 14:54
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 29楼 azzbcc
那个initialize函数是怎么运作的~能不能讲解一下~这个phi里面的数据结果不太理解耶~

@xzlxzl
~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-10 15:46
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 36楼 九转星河
欧拉函数,phi(n) 指 1-n 中与n互质的数的个数。

initialize函数是欧拉筛素数,在某个数量级效率比埃氏筛效率还要高一些。

代码是在网上找的模板,理解了就行了。


顺便回复楼主,出错的可能性不少。

1. m值判断,为1时没考虑。
2. 数据范围,因为MAX为10000,所以程序只能判断1亿内的数,超过的话要改MAX。
3. 编译错误。代码中有汉字导致乱码,编译器不支持c99模式之类的。
4. 输出冗余。你应该会把我多余的输出删掉的吧。


[fly]存在即是合理[/fly]
2017-03-10 16:22
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 37楼 azzbcc
一点就明白~已经理解phi(n)是怎么算出来的了~正如a版所说~这方法理解就行~大一目前还没有接触欧拉函数这种东东~现在这个程序大体可以理解~先记下了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-10 16:47
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
我觉得只要一个longlong型就行了,另外运行时间是怎么算出来的?
#include <stdio.h>

int mod(int m,int n)
{
    unsigned long long a;
    int i;
    a=(n*n)%(m*n-1);
    for(i=2;a!=1;i++)
    {
        a=(a*n)%(m*n-1);
    }
    return     i;   
}


int main()
 {
   int m,n;
   
   while(scanf("%d%d",&m,&n)==2&&m>1&&n>1)
       printf("%d\n",mod(m,n));
   
   
 }
2017-03-10 20:09
莫名Vet
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2017-3-6
收藏
得分:0 
回复 39楼 ehszt
超时
2017-03-10 22:20
快速回复:一道新生赛的题目
数据加载中...
 
   



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

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