当前位置: 代码迷 >> 综合 >> 模运算-素数-计算方法
  详细解决方案

模运算-素数-计算方法

热度:18   发布时间:2023-12-19 11:38:48.0

模运算举例:

  6265 % 133
  = 62 * 6264 % 133
  = 62 * (622)32 % 133
  = 62 * 384432 % 133
  = 62 * (3844 % 133)32 % 133
  = 62 * 12032 % 133

  = 62 * 3616 % 133
  = 62 * 998 % 133
  = 62 * 924 % 133
  = 62 * 852 % 133
  = 62 * 43 % 133
  = 2666 % 133
  = 6


根据例子可以看出规律,这样模运算就会很省事。

HDU-2035代码:

#include<stdio.h>
int head;
int pan(int x,int y)
{if(y==0)return 1;if(y==1)return x%1000;if(y%2!=0)head=head*x%1000;return pan(x*x%1000,y/2);
}
int main()
{int  m,n,s;while(scanf("%d%d",&m,&n)&&(m||n)){head=1;s=pan(m,n);printf("%d\n",s*head%1000);}return 0;
}

至今还未发现什么高级点的素数计算方法。现在最常用的也就是筛选法,不过效率太低,数组一大就不适应了。

筛选法:就是标记数组中可以被2整除的,然后标记可以被3整除的,一直标记到可以n整除的,没被标记的就是素数。

HDU OJ 1262 代码

#include<stdio.h>
int main()
{int s[10001];int i,n,j;for(i=0;i<10001;i++)s[i]=1;for(i=2;i<=10000;i++){if(s[i]==1){for(j=2;j<i;j++){if(i!=j&&i%j==0){s[i]=0;break;}}}}while(scanf("%d",&n)&&n){int leap=0;for(i=(n-1)/2;i>=2;i--){if(s[i]==1&&s[n-i]==1)leap++;}printf("%d\n",leap);}return 0;
}