用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
freshare的公告
<span style="COLOR:FF0000;height:50;width:166" valign="middle"><table height="5" border="0"><tr><td></td></tr></table><table width="166" height="50" border="0" cellpadding="0" cellspacing="0" style="border-style: dotted; border-width: 1"><tr><td style="COLOR:0000FF;height:50;width:160;font-size: 9pt" valign="middle"><marquee height="50" width="160" id="rabbit" onmouseover="rabbit.stop()" onmouseout="rabbit.start()" valign="middle" scrolldelay="1" scrollamount="1" direction="up" style="cursor:hand"> &nbsp;清翔兔欢迎您的光临!<br> &nbsp;有任何建议欢迎与我联系<br>&nbsp;<a href="mailto:f.master@126.com">f.master@126.com</a> </marquee></td></tr></table></span><script language="JavaScript" type="text/javascript" src="http://union1.50bang.com/click.js?user_id=19458"></script>
文章分类
链接我世界
清翔网[1984一代]
清翔兔的作品展示
[玻璃体视网膜]系统
存档

原创  清翔兔原创[数的本原元算法] 收藏

#include <iostream>
#include <vector>
#include <cmath>
#include "BigNum.h"
using namespace std;

int euclid(int d,int f)  //欧几里得算法(最大公约数)
{
 int m = d;
 int y = f;
 int r;
 while(1){
  if(y==0) return m;
  r = m % y;
  m = y;
  y = r;
 }
}

void benyy(int m)          //清翔兔编写,本原元算法
{
 vector<int> vec1,vec2;

 //求出小于m且与m互素的所有正整数,存入vec1中
 for(int i=1;i<=m;i++)
  if( euclid(m,i)==1 )
   vec1.push_back(i);
 int num = int(vec1.size());
 
 //判断是否是本原元
 for(int i=1;i<num;i++)
 {
  int j=2; //一阶不用算,所以首次即为二阶
  int flag=1;
  BigNum bignum(vec1[i]);
  BigNum temp = bignum;

  //求出在模m下的各数的阶(最小正整数)
  while(flag)
  {
   bignum = bignum * temp;
   BigNum mod = bignum%m;
   if(mod.isValueOne()) {
    flag=0;
    break;
   }
   if(j>num) break;
   j++;
  }

  // 数的阶等于m时,存入vec2中
  if(j==num)
   vec2.push_back(vec1[i]);
 }

 for(size_t i=0;i<vec2.size();i++)
 {
  cout << vec2[i]<<endl;
 }
}

void main()
{
 cout <<"清翔兔@2006\n本原元计算,请输入一个数:";
 int a;
 cin >> a;
 cout << "它的本原元如下:" <<endl;
 benyy(a); //示例,求出19的所有本原元
}

// down exe file:  http://i1984.com/x/page53_ex4-5.exe

发表于 @ 2006年03月27日 19:52:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:扩展欧几里得算法(最大公约数及逆元)算法 | 新一篇:[集中回复]来信询问C++电梯程序的问题

  • 发表评论
  • 评论内容:
  •  
Copyright © freshare
Powered by CSDN Blog