• COJ 3018 求1~n之间的素数


    求1~n之间的素数
    难度级别:A; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
    试题描述
     素数是大于1,且除1和本身以外不能被其他整数所整除的数。要求输出1~n之间的素数。
    输入
    正整数n
    输出
    1~n之间的所有素数,包括n,数字之间用一个空格隔开,第一个数字前不能有空格。
    输入示例
    10
    输出示例
    2 3 5 7
    其他说明
    n是大于1且不大于100的正整数

    题解:可以练习一下MR(都不会打了)

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstring>
     7 #include<ctime>
     8 #define PAU putchar(' ')
     9 #define ENT putchar('
    ')
    10 using namespace std;
    11 const int Safe=3;
    12 int gcd(int a,int b){return !b?a:gcd(b,a%b);}
    13 int mul(int a,int b,int p){
    14     int tmp=(a*b-(int)((double)a/p*b+1e-8)*p);
    15     return tmp<0?tmp+p:tmp;
    16 }
    17 int pow(int a,int b,int p){
    18     int ans=1;a%=p;
    19     for(int i=b;i;i>>=1,a=mul(a,a,p))
    20         if(i&1)ans=mul(ans,a,p);
    21     return ans;
    22 }
    23 bool check(int a,int n,int r,int s){
    24     int ans=pow(a,r,n),p=ans;
    25     for(int i=1;i<=s;i++){
    26         ans=mul(ans,ans,n);
    27         if(ans==1&&p!=1&&p!=n-1) return true;
    28         p=ans;
    29     } if(ans!=1)return true;return false;
    30 }
    31 bool MR(int n){
    32     if(n<=1) return false;
    33     if(n==2) return true;
    34     if(!(n&1)) return false;
    35     int r=n-1,s=0;
    36     while(!(r&1)) r>>=1,s++;
    37     for(int i=0;i<Safe;i++)
    38         if(check(rand()%(n-1)+1,n,r,s)) return false;
    39     return true;
    40 }
    41 inline int read(){
    42     int x=0,sig=1;char ch=getchar();
    43     while(!isdigit(ch)){if(ch=='-')sig=-1;ch=getchar();}
    44     while(isdigit(ch))x=10*x+ch-'0',ch=getchar();
    45     return x*=sig;
    46 }
    47 inline void write(int x){
    48     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
    49     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
    50     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
    51 }
    52 bool first=true;
    53 void init(){
    54     srand(time(0));
    55     int n=read();
    56     for(int i=2;i<=n;i++){
    57         if(MR(i)){
    58             if(first) first=false;
    59             else PAU;
    60             printf("%d",i);
    61         }
    62     }
    63     return;
    64 }
    65 void work(){
    66     return;
    67 }
    68 void print(){
    69     return;
    70 }
    71 int main(){init();work();print();return 0;}
  • 相关阅读:
    小艾电台-小众音乐科普讲座
    永乐计分器
    顺金斗花牌-比大小
    Bigger_0305
    iTunes Connect后台无法创建App的解决方案
    iOS navigationBar导航栏底部与self.view的分界线的隐藏
    iOS 十六进制的相加取反
    UITabBar-UITabBarItem图片的背景颜色属性和文字的颜色大小设置
    iOS GCD多线程介绍
    [POJ3461] Oulipo
  • 原文地址:https://www.cnblogs.com/chxer/p/4561440.html
Copyright © 2020-2023  润新知