• ______________从时间超限到800ms 到200ms——————2098


    分拆素数和
    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 28685    Accepted Submission(s): 12471
    
    
    Problem Description
    把一个偶数拆成两个不同素数的和,有几种拆法呢?
     
    
    Input
    输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
     
    
    Output
    对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
     
    
    Sample Input
    30
    26
    0
     
    
    Sample Output
    3
    2
     
    
    Source
    2007省赛集训队练习赛(2

    题是水题.....但是 就是写不成.总是超时..还是一些技巧不知道 下面附上原始的800ms

    /*
    和最初写的程序比较起来....这个 比较容易看懂 
    上一个自己就把自己写晕了
    */
    #include<stdio.h>
    int prime(int x); 
    int main()    
    {                 
        int n,i,j,m,a,b,c;      
        while(scanf("%d",&n),n)
        {
            int jishu=0;
            for(i=2;i<n/2;i++)
            {
                j=n-i;
                if(prime(i)==1&&prime(j)==1)
                {
                    jishu++;
                }
            }
            printf("%d
    ",jishu);
        } 
    } 
    int prime(int a)
    {
        int i,t=1;
        for(i=2;i<=a/2;i++)//将输入进来的数字  开始检查. 
        {
            if(a%i==0)   //在这里没有   加括号...
            {
                t=0;
                break;    //   跳出去 
            }
        }
        return t;
        
    }

    下面带上 200ms  直接缩小4倍时间的  代码并且 给出  改动的地方

    /*
    和最初写的程序比较起来....这个 比较容易看懂 
    上一个自己就把自己写晕了
    */
    #include<stdio.h>
    #include<math.h>
    int prime(int x); 
    int main()    
    {                 
        int n,i,j,m,a,b,c;      
        while(scanf("%d",&n),n)
        {
            int jishu=0;
            for(i=2;i<n/2;i++)
            {
                j=n-i;
                if(prime(i)==1&&prime(j)==1)
                {
                    jishu++;
                }
            }
            printf("%d
    ",jishu);
        } 
    } 
    int prime(int a)
    {
        int i,t=1;
        for(i=2;i<=sqar(a);i++)//                              唯一改动的地方 (求是不是素数的时候开平方 这样 能减少  很多运算....时间就是乳沟一样 这里挤挤那里挤挤就有了....) 
        {
            if(a%i==0)   //在这里没有   加括号...
            {
                t=0;
                break;    //   跳出去 
            }
        }
        return t;
        
    }
  • 相关阅读:
    CSS BEM 命名规范简介
    React 端的编程范式
    在React应用程序中用RegEx测试密码强度
    React 中获取数据的 3 种方法及它们的优缺点
    vue props传值常见问题
    如何理解vue中的v-model?
    利用jQuery not()方法选取除某个元素外的所有元素
    初识Nest.js
    react-绑定this并传参的三种方式
    Angular怎么防御xss攻击?
  • 原文地址:https://www.cnblogs.com/A-FM/p/5039774.html
Copyright © 2020-2023  润新知